C语言sample input如何正确使用?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 C语言 正文

最简单的示例:读取一个整数

这是最常见的入门场景,程序提示用户输入一个数字,然后读取并打印它。

sample input c语言
(图片来源网络,侵删)

示例输入:

10

(用户在键盘上输入数字 10,然后按回车键)

C语言代码:

#include <stdio.h>
int main() {
    int number; // 1. 声明一个整型变量来存储输入
    printf("请输入一个整数: "); // 2. 提示用户输入
    // 3. 读取用户输入的整数
    // scanf 是一个格式化输入函数,"%d" 表示读取一个十进制整数
    // &number 是变量的地址,scanf需要将读取到的值存放到这个地址
    scanf("%d", &number);
    // 4. 打印读取到的值
    printf("你输入的整数是: %d\n", number);
    return 0;
}

代码解释:

  1. #include <stdio.h>: 包含标准输入输出库,这样我们才能使用 printfscanf
  2. int number;: 声明一个整型变量 number,用来存放我们即将读取的数字。
  3. printf("请输入一个整数: ");: 在屏幕上打印一条提示信息,告诉用户该做什么。
  4. scanf("%d", &number);: 这是核心部分。
    • scanf 函数用于从标准输入(通常是键盘)读取数据。
    • "%d" 是一个格式说明符,它告诉 scanf 我们期望读取的是一个十进制整数。
    • &numbernumber 变量的内存地址scanf 函数需要这个地址,以便将读取到的值存放到 number 变量中。忘记 & 是一个非常常见的初学者错误!
  5. printf("你输入的整数是: %d\n", number);: 打印一条确认信息,%d 会被 number 变量的实际值替换。

读取多个不同类型的数据

一个程序通常需要不止一个输入,我们可以连续使用 scanf 来读取多个数据。

示例输入:

张三 20 85.5

(一个字符串,一个整数,一个浮点数)

C语言代码:

#include <stdio.h>
int main() {
    char name[50]; // 用于存储字符串(名字)
    int age;       // 用于存储整数(年龄)
    float score;   // 用于存储浮点数(分数)
    printf("请输入姓名、年龄和分数(用空格隔开): ");
    // 读取一个字符串,一个整数,一个浮点数
    // 注意:scanf 默认会跳过空白字符(空格、Tab、回车)
    scanf("%s %d %f", name, &age, &score);
    printf("姓名: %s, 年龄: %d, 分数: %.2f\n", name, age, score);
    return 0;
}

代码解释:

  • char name[50];: 声明一个字符数组(也就是C语言中的字符串),最多可以存放49个字符 + 1个字符串结束符 \0
  • scanf("%s %d %f", name, &age, &score);:
    • "%s %d %f": 这三个格式说明符分别对应一个字符串、一个整数和一个浮点数,它们之间的空格表示 scanf 在读取时会跳过任意数量的空白字符。
    • name: 对于数组,name 本身会“衰变”为其首元素的地址,所以不需要写 &name,这是C语言的一个特例。
    • &age, &score: 对于普通变量,仍然需要使用 & 来获取地址。

处理一行输入(包含空格)

scanf 使用 %s 读取字符串时,遇到空格就会停止,如果我们想读取一整行("John Doe" 这样的带空格的名字),scanf 就不合适了,这时应该使用 fgets

sample input c语言
(图片来源网络,侵删)

示例输入:

John Doe
25

(第一行是一个带空格的名字,第二行是年龄)

C语言代码:

#include <stdio.h>
#include <string.h> // 用于 strlen 函数
int main() {
    char name[100]; // 足够大的缓冲区来存储一行
    int age;
    // 读取一整行输入,包括空格
    // stdin 表示标准输入(键盘)
    // sizeof(name) 确保 fgets 不会读取超过数组容量的字符,防止缓冲区溢出
    fgets(name, sizeof(name), stdin);
    // fgets 会读取换行符 \n,所以我们需要手动去掉它
    name[strcspn(name, "\n")] = 0;
    printf("请输入年龄: ");
    scanf("%d", &age);
    printf("姓名: %s, 年龄: %d\n", name, age);
    return 0;
}

代码解释:

  • fgets(name, sizeof(name), stdin);:
    • fgets 从指定的流(这里是 stdin,键盘)读取一行。
    • 它会读取最多 size-1 个字符,或者遇到换行符 \n 为止。
    • 关键区别fgets 会把换行符 \n 也当作一个普通字符读取并存入字符串中,而 scanf 不会。
  • name[strcspn(name, "\n")] = 0;: 这是去掉字符串末尾换行符的标准方法。
    • strcspn(name, "\n") 会找到 \n 在字符串中的位置(索引)。
    • 然后我们使用这个索引,将该位置的字符替换为字符串结束符 \0,从而截断字符串。
  • 注意:在 fgets 之后使用 scanf 时要小心,因为 fgets 读取了用户按下的回车,这个回车会留在输入缓冲区中。scanf 可能会直接读取这个回车而跳过等待,上面的例子中,由于 scanf 读取的是整数,所以没有这个问题,但如果后面是 fgets,就需要先清空输入缓冲区。

从文件中读取示例输入

在实际开发或编程竞赛中,输入数据通常来自一个文件,而不是手动键盘输入,这可以自动化测试流程。

假设我们有一个名为 input.txt 的文件,内容如下:

input.txt:

5
10 20 30 40 50

C语言代码:

#include <stdio.h>
int main() {
    int n, i;
    int numbers[100];
    // 以只读模式 ("r") 打开文件 "input.txt"
    FILE *file = fopen("input.txt", "r");
    // 检查文件是否成功打开
    if (file == NULL) {
        printf("无法打开文件 input.txt\n");
        return 1; // 返回非零值表示错误
    }
    // 从文件中读取第一个整数 n
    fscanf(file, "%d", &n);
    // 从文件中读取 n 个整数到数组中
    for (i = 0; i < n; i++) {
        fscanf(file, "%d", &numbers[i]);
    }
    // 打印读取到的数据以供验证
    printf("从文件读取到的数据:\n");
    printf("n = %d\n", n);
    printf("数组元素: ");
    for (i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");
    // 关闭文件,这是一个好习惯
    fclose(file);
    return 0;
}

代码解释:

  • *`FILE file = fopen("input.txt", "r");fopen` 函数用于打开文件。
    • 第一个参数是文件名。
    • 第二个参数是打开模式,"r" 表示 "read"(只读)。
    • 它返回一个指向 FILE 结构体的指针,后续所有文件操作都通过这个指针进行。
  • if (file == NULL): 如果文件不存在或无法打开,fopen 会返回 NULL,检查 NULL 是一个至关重要的安全步骤。
  • fscanf(file, ...): fscanfscanf 用法几乎完全一样,只是第一个参数指定了从哪里读取数据(这里是 file 指针指向的文件)。
  • fclose(file);: 操作完成后,必须关闭文件,释放系统资源。
场景 推荐函数 关键点
读取单个整数/浮点数 scanf("%d", &var); 必须使用 & 获取变量地址。
读取多个数据(无空格) scanf("%d %s", &a, b); 格式说明符之间用空格隔开,自动跳过空白字符。
读取一行(可能含空格) fgets(buffer, size, stdin); 会读取换行符 \n,需要手动去除。
从文件读取 fscanf(file, "%d", &var); 先用 fopen 打开文件,得到 FILE* 指针,最后用 fclose 关闭。

理解并掌握这些基本的输入方法,是学习C语言编程的重要基石。

sample input c语言
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦orderby click如何实现点击量排序?
« 上一篇 2025-12-17
织梦CMS与WordPress选哪个?
下一篇 » 2025-12-17

相关文章

取消
微信二维码
支付宝二维码

目录[+]