首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言中sprintf函数和scanf函数简介。

C语言中sprintf函数和scanf函数简介。

作者头像
晚霞的不甘
发布2025-12-23 10:11:31
发布2025-12-23 10:11:31
1870
举报

1. sprintf 函数

功能

将格式化的数据写入字符串中。

函数原型

代码语言:javascript
复制
int sprintf(char *str, const char *format, ...);

参数说明

· str:指向存储结果字符串的缓冲区 · format:格式化字符串 · …:可变参数列表

常用格式说明符

· %d:有符号十进制整数 · %f:浮点数 · %c:字符 · %s:字符串 · %x:十六进制整数 · %p:指针地址

示例代码

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main() {
    char buffer[100];
    int a = 10;
    float b = 3.14;
    char c = 'A';
    char name[] = "World";
    
    // 基本使用
    sprintf(buffer, "整数: %d, 浮点数: %.2f", a, b);
    printf("%s\n", buffer);
    
    // 字符串拼接
    sprintf(buffer, "Hello %s!", name);
    printf("%s\n", buffer);
    
    // 数字转字符串
    char numStr[20];
    sprintf(numStr, "%d", 12345);
    printf("数字字符串: %s\n", numStr);
    
    // 复杂格式化
    sprintf(buffer, "字符: %c, 十六进制: %x, 地址: %p", c, a, &a);
    printf("%s\n", buffer);
    
    return 0;
}

输出结果

代码语言:javascript
复制
整数: 10, 浮点数: 3.14
Hello World!
数字字符串: 12345
字符: A, 十六进制: a, 地址: 0x7ffeebd7a8ac

2. scanf 函数

功能

从标准输入读取格式化的数据。

函数原型

代码语言:javascript
复制
int scanf(const char *format, ...);

参数说明

· format:格式化字符串 · …:可变参数列表(必须是指针)

常用格式说明符

· %d:读取整数 · %f:读取浮点数 · %c:读取字符 · %s:读取字符串 · %lf:读取双精度浮点数

示例代码

代码语言:javascript
复制
#include <stdio.h>

int main() {
    int age;
    float height;
    char grade;
    char name[50];
    
    // 读取单个值
    printf("请输入年龄: ");
    scanf("%d", &age);
    
    // 读取多个值
    printf("请输入身高和等级: ");
    scanf("%f %c", &height, &grade);
    
    // 读取字符串
    printf("请输入姓名: ");
    scanf("%s", name);
    
    // 清除输入缓冲区
    while (getchar() != '\n');
    
    // 带格式的读取
    int year, month, day;
    printf("请输入日期(YYYY-MM-DD): ");
    scanf("%d-%d-%d", &year, &month, &day);
    
    printf("\n--- 输入结果 ---\n");
    printf("姓名: %s\n", name);
    printf("年龄: %d\n", age);
    printf("身高: %.2f\n", height);
    printf("等级: %c\n", grade);
    printf("日期: %d年%d月%d日\n", year, month, day);
    
    return 0;
}

3. 高级用法和注意事项

sprintf 的安全版本 - snprintf

代码语言:javascript
复制
#include <stdio.h>

int main() {
    char buffer[10];
    int n;
    
    // snprintf 可以防止缓冲区溢出
    n = snprintf(buffer, sizeof(buffer), "这是一个很长的字符串");
    printf("缓冲区内容: %s\n", buffer);
    printf("实际需要的长度: %d\n", n);  // 可能大于缓冲区大小
    
    return 0;
}

scanf 的安全使用

代码语言:javascript
复制
#include <stdio.h>

int main() {
    char name[20];
    
    // 限制输入长度,防止缓冲区溢出
    printf("请输入姓名(最多19个字符): ");
    scanf("%19s", name);
    
    printf("你好, %s!\n", name);
    
    return 0;
}

处理输入错误

代码语言:javascript
复制
#include <stdio.h>

int main() {
    int number;
    
    printf("请输入一个整数: ");
    
    // 检查scanf的返回值
    if (scanf("%d", &number) == 1) {
        printf("你输入的是: %d\n", number);
    } else {
        printf("输入错误!\n");
        // 清除错误的输入
        while (getchar() != '\n');
    }
    
    return 0;
}

4. 实际应用示例

数据格式化存储

代码语言:javascript
复制
#include <stdio.h>

struct Student {
    char name[50];
    int age;
    float score;
};

int main() {
    struct Student stu = {"张三", 20, 85.5};
    char info[100];
    
    // 将结构体信息格式化为字符串
    sprintf(info, "姓名:%s, 年龄:%d, 成绩:%.1f", 
            stu.name, stu.age, stu.score);
    
    printf("学生信息: %s\n", info);
    
    return 0;
}

字符串解析

代码语言:javascript
复制
#include <stdio.h>

int main() {
    char data[] = "25 3.14 A";
    int num;
    float f;
    char ch;
    
    // 从字符串中解析数据
    sscanf(data, "%d %f %c", &num, &f, &ch);
    
    printf("解析结果:\n");
    printf("整数: %d\n", num);
    printf("浮点数: %.2f\n", f);
    printf("字符: %c\n", ch);
    
    return 0;
}

5. 重要注意事项

  1. 缓冲区溢出:sprintf 不会检查目标缓冲区大小,建议使用 snprintf
  2. 指针传递:scanf 需要变量的地址,不要忘记 & 符号
  3. 输入验证:始终检查 scanf 的返回值
  4. 缓冲区清理:混合使用 scanf 和 gets/fgets 时要注意清理输入缓冲区
  5. 安全性:避免使用 %s 而不指定最大长度

这些函数是C语言中处理格式化输入输出的核心工具,熟练掌握它们对于C语言编程至关重要。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档