C语言输入输出函数详解:scanf和printf的使用方法与技巧 | C语言教程

C语言输入与输出完全解析:“用scanf接收用户输入,掌握printf高级格式化”。

​C语言输入输出函数详解,深度讲解scanf函数如何接收用户键盘输入,并详细介绍printf函数的格式化输出技巧。包含代码示例和常见问题解答。,让你能够创建出动态交互的程序。

1. 格式化输出函数 printf

在C语言中printf函数它的基本功能是将内容格式化输出到标准输出设备(通常是屏幕)。其基本语法为:

printf("格式控制字符串", 参数1, 参数2, ...);

格式控制字符串包含两类内容:

  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. 常见问题与注意事项

  1. 忘记写 &(取地址符)​​:这是最常见的错误。编译器可能不会报错,但程序运行时会崩溃或产生不可预知的结果。
    • 错误:​scanf("%d", age);
    • 正确:​scanf("%d", &age);
  2. 输入数据不匹配​:如果用户输入的数据类型与 scanf期待的格式符不匹配(例如,要求输入整数却输入了字母),scanf会读取失败,变量值不会被更新,程序逻辑会出错。
  3. 一次性输入多个值​:scanf可以一次读取多个输入。
    int a, b;
    printf("请输入两个整数,用空格隔开: ");
    scanf("%d %d", &a, &b); // 用户输入 "10 20"
    printf("a=%d, b=%d\n", a, b);

    在输入时,可以用空格、制表符或回车来分隔多个数据。

  4. 缓冲区和 %c的陷阱​:由于输入缓冲区的存在,在连续使用 scanf读取数字和字符时可能会遇到问题。
    int age;
    char grade;
    printf("请输入年龄: ");
    scanf("%d", &age); // 用户输入25后按回车
    printf("请输入等级: ");
    scanf("%c", &grade); // 这里会直接读取上一次输入留下的回车符,而不会等待用户输入

    解决方案​:在 %c前加一个空格,可以消耗掉之前的任何空白字符(包括空格、回车等)。

    • 正确写法:​scanf(" %c", &grade); // 注意%c前面的空格

6. 动手练习

  1. 基础练习:​​ 编写一个C程序,要求用户输入一个圆的半径,然后计算并输出该圆的周长和面积。(π 取 3.14159)
  2. 进阶练习:​​ 编写一个简单的个人信息登记程序。要求用户依次输入:姓名(单个字符或字符串雏形)、年龄、身高(米)。然后以清晰的格式输出所有信息。例如:
    请输入姓名: A
    请输入年龄: 22
    请输入身高: 1.78
    ------------
    登记信息如下:
    姓名: A
    年龄: 22
    身高: 1.78米

    (提示:字符串输入可以先使用 %s,但要注意它遇到空格会停止读取,后续学习字符数组时会详细讲解。)


发表评论