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.605. 常见问题与注意事项
- 忘记写 &(取地址符):这是最常见的错误。编译器可能不会报错,但程序运行时会崩溃或产生不可预知的结果。- 错误: 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,但要注意它遇到空格会停止读取,后续学习字符数组时会详细讲解。)