
1. sprintf 函数
功能
将格式化的数据写入字符串中。
函数原型
int sprintf(char *str, const char *format, ...);参数说明
· str:指向存储结果字符串的缓冲区 · format:格式化字符串 · …:可变参数列表
常用格式说明符
· %d:有符号十进制整数 · %f:浮点数 · %c:字符 · %s:字符串 · %x:十六进制整数 · %p:指针地址
示例代码
#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;
}输出结果
整数: 10, 浮点数: 3.14
Hello World!
数字字符串: 12345
字符: A, 十六进制: a, 地址: 0x7ffeebd7a8ac2. scanf 函数
功能
从标准输入读取格式化的数据。
函数原型
int scanf(const char *format, ...);参数说明
· format:格式化字符串 · …:可变参数列表(必须是指针)
常用格式说明符
· %d:读取整数 · %f:读取浮点数 · %c:读取字符 · %s:读取字符串 · %lf:读取双精度浮点数
示例代码
#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
#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 的安全使用
#include <stdio.h>
int main() {
char name[20];
// 限制输入长度,防止缓冲区溢出
printf("请输入姓名(最多19个字符): ");
scanf("%19s", name);
printf("你好, %s!\n", name);
return 0;
}处理输入错误
#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. 实际应用示例
数据格式化存储
#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;
}字符串解析
#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. 重要注意事项
这些函数是C语言中处理格式化输入输出的核心工具,熟练掌握它们对于C语言编程至关重要。