C语言输入与输出:从零掌握数据的“对话”
手把手教你理解C语言中输入(Input)与输出(Output)的核心操作。
一、输入与输出是什么?
C语言通过标准库函数实现程序与用户(或设备)的“对话”:
- 输出:程序将数据展示给用户(如打印到屏幕)。
- 输入:用户向程序传递数据(如键盘输入)。
二、基础输出函数:printf()
printf()
是C语言最常用的输出函数,支持格式化输出。
1. 基本用法
#include <stdio.h>
int main() {
printf("Hello, World!\n"); // 输出字符串并换行
printf("数字:%d,小数:%.2f\n", 10, 3.1415); // 格式化输出
return 0;
}
2. 格式符表(核心符号)
格式符 | 说明 | 示例 |
---|---|---|
%d | 整型 | printf("%d", 100); |
%f | 浮点型(默认6位小数) | printf("%.2f", 3.1415); → 输出 3.14 |
%c | 单个字符 | printf("%c", 'A'); |
%s | 字符串 | printf("%s", "Hello"); |
三、基础输入函数:scanf()
scanf()
用于从键盘读取数据,需注意变量地址传递(使用 &
)。
1. 基本用法
#include <stdio.h>
int main() {
int age;
printf("请输入年龄:");
scanf("%d", &age); // 读取整数并存入变量age的地址
printf("你的年龄是:%d\n", age);
return 0;
}
2. 输入多个值
int num1, num2;
scanf("%d %d", &num1, &num2); // 输入时用空格分隔两个整数
四、字符与字符串的输入输出
1. 单个字符:getchar()
和 putchar()
char c = getchar(); // 读取一个字符(包括换行符)
putchar(c); // 输出字符
2. 字符串:fgets()
(安全输入)
避免使用不安全的 gets()
,优先用 fgets()
:
char name[50];
printf("请输入姓名:");
fgets(name, sizeof(name), stdin); // 安全读取字符串(含空格)
printf("你的姓名:%s", name);
五、常见问题与解决
1. scanf()
的“残留换行符”问题
输入数值后,若直接调用 getchar()
会读到残留的 \n
:
int num;
char ch;
scanf("%d", &num);
// ch = getchar(); // 此时ch读取到的是换行符,而非用户输入
解决方案:清空输入缓冲区
int c;
while ((c = getchar()) != '\n' && c != EOF); // 清除残留内容
2. 格式符与变量类型不匹配
float price;
scanf("%d", &price); // 错误!应用 %f
六、输入输出对比总结
操作类型 | 常用函数 | 关键点 |
---|---|---|
输出 | printf | 格式符需与数据类型严格匹配 |
输入 | scanf | 变量前加 & ,注意缓冲区问题 |
字符串 | fgets | 安全、可读包含空格的字符串 |
七、实战代码:用户信息录入
#include <stdio.h>
int main() {
char name[50];
int age;
printf("请输入姓名:");
fgets(name, sizeof(name), stdin);
printf("请输入年龄:");
scanf("%d", &age);
// 清空输入缓冲区残留的换行符
int c;
while ((c = getchar()) != '\n' && c != EOF);
printf("\n录入结果:\n");
printf("姓名:%s", name);
printf("年龄:%d\n", age);
return 0;
}
运行效果:
请输入姓名:Alice Smith
请输入年龄:30
录入结果:
姓名:Alice Smith
年龄:30
总结
- 输出用
printf
,注意格式符;输入用scanf
和fgets
,警惕缓冲区问题。 - 字符串输入优先选
fgets
,避免gets
的安全隐患。 - 细节决定成败:地址符
&
、格式符匹配、缓冲区清理是关键!