C语言输入输出函数详解:scanf和printf的使用方法与技巧 | C语言教程
C语言输入与输出完全解析:“用scanf接收用户输入,掌握printf高级格式化”。
C语言输入输出函数详解,深度讲解scanf函数如何接收用户键盘输入,并详细介绍printf函数的格式化输出技巧。包含代码示例和常见问题解答。,让你能够创建出动态交互的程序。
1. 格式化输出函数 printf
在C语言中printf函数它的基本功能是将内容格式化输出到标准输出设备(通常是屏幕)。其基本语法为:
printf("格式控制字符串", 参数1, 参数2, ...);
格式控制字符串包含两类内容:
- 普通字符:会原样输出。
- 格式说明符:以
%开头,指定了后续参数应以何种形式输出。
常用的格式说明符:
| 格式符 | 适用数据类型 | 说明 |
|---|---|---|
%d |
int |
输出有符号十进制整数 |
%f |
float, double |
输出十进制浮点数 |
%c |
char |
输出单个字符 |
%s |
字符串(字符数组) | 输出一个字符串 |
%lf |
double |
用于 scanf输入 double时,printf输出 double也可以用 %f |
2. 进阶:printf 的格式化技巧
printf的强大之处在于可以对输出的格式进行精细控制。
示例1:控制浮点数精度和小数位数
#include <stdio.h>
int main() {
float pi = 3.14159;
printf("默认输出: %f\n", pi);
printf("保留两位小数: %.2f\n", pi); // 输出 3.14
printf("总宽度8位,右对齐,保留3位小数: %8.3f\n", pi); // 输出 " 3.142"
return 0;
}
%.2f中的.2表示保留两位小数。%8.3f中的8表示输出的最小宽度为8个字符(不足用空格填充),.3表示保留三位小数。
示例2:控制整数输出的宽度和对齐
#include <stdio.h>
int main() {
int num = 123;
printf("默认输出: |%d|\n", num);
printf("宽度10位,右对齐: |%10d|\n", num); // 输出 "| 123|"
printf("宽度10位,左对齐: |%-10d|\n", num); // 输出 "|123 |"
printf("用0填充空位: |%010d|\n", num); // 输出 "|0000000123|"
return 0;
}
3. 核心重点:输入函数 scanf
scanf是C语言中最重要的标准输入函数,用于从标准输入设备(通常是键盘)读取格式化输入。其语法与 printf类似:
scanf("格式控制字符串", &变量1, &变量2, ...);
关键点:
- 格式控制字符串:同样包含格式说明符(如
%d,%f,%c),它告诉scanf应该读取什么类型的数据。 - 取地址运算符
&:这是新手最容易忘记和出错的地方。&变量名表示获取该变量在内存中的地址。scanf需要知道变量的地址,才能把读取到的数据存放到正确的位置。
常见的 scanf 格式说明符:
| 格式符 | 适用数据类型 | 示例 |
|---|---|---|
%d |
int |
scanf("%d", &age); |
%f |
float |
scanf("%f", &score); |
%lf |
double |
scanf("%lf", &price); |
%c |
char |
scanf("%c", &grade); |
注意: 输入 double类型时,必须使用 %lf,而不能用 %f。
4. 实战演练:创建一个交互式程序
让我们编写一个程序,计算任意矩形的面积。
#include <stdio.h>
int main() {
// 1. 声明变量
float width, height, area;
// 2. 提示用户输入并接收数据
printf("请输入矩形的宽度: ");
scanf("%f", &width); // 注意 & 符号
printf("请输入矩形的高度: ");
scanf("%f", &height);
// 3. 进行计算
area = width * height;
// 4. 格式化输出结果
printf("----------------------------\n");
printf("宽度: %.2f\n", width);
printf("高度: %.2f\n", height);
printf("面积为: %.2f\n", area);
return 0;
}
运行示例:
请输入矩形的宽度: 5.5
请输入矩形的高度: 3.2
----------------------------
宽度: 5.50
高度: 3.20
面积为: 17.60
5. 常见问题与注意事项
- 忘记写
&(取地址符):这是最常见的错误。编译器可能不会报错,但程序运行时会崩溃或产生不可预知的结果。- 错误:
scanf("%d", age); - 正确:
scanf("%d", &age);
- 错误:
- 输入数据不匹配:如果用户输入的数据类型与
scanf期待的格式符不匹配(例如,要求输入整数却输入了字母),scanf会读取失败,变量值不会被更新,程序逻辑会出错。 - 一次性输入多个值:
scanf可以一次读取多个输入。int a, b; printf("请输入两个整数,用空格隔开: "); scanf("%d %d", &a, &b); // 用户输入 "10 20" printf("a=%d, b=%d\n", a, b);在输入时,可以用空格、制表符或回车来分隔多个数据。
- 缓冲区和
%c的陷阱:由于输入缓冲区的存在,在连续使用scanf读取数字和字符时可能会遇到问题。int age; char grade; printf("请输入年龄: "); scanf("%d", &age); // 用户输入25后按回车 printf("请输入等级: "); scanf("%c", &grade); // 这里会直接读取上一次输入留下的回车符,而不会等待用户输入解决方案:在
%c前加一个空格,可以消耗掉之前的任何空白字符(包括空格、回车等)。- 正确写法:
scanf(" %c", &grade); // 注意%c前面的空格
- 正确写法:
6. 动手练习
- 基础练习: 编写一个C程序,要求用户输入一个圆的半径,然后计算并输出该圆的周长和面积。(π 取 3.14159)
- 进阶练习: 编写一个简单的个人信息登记程序。要求用户依次输入:姓名(单个字符或字符串雏形)、年龄、身高(米)。然后以清晰的格式输出所有信息。例如:
请输入姓名: A 请输入年龄: 22 请输入身高: 1.78 ------------ 登记信息如下: 姓名: A 年龄: 22 身高: 1.78米(提示:字符串输入可以先使用
%s,但要注意它遇到空格会停止读取,后续学习字符数组时会详细讲解。)