You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何使用scanf一次性读取1到3个不确定数量的整数

问题根源

你原本的写法问题在于scanf的%d格式符会自动跳过所有空白符(包括空格、换行、制表符等),如果用户只输入1或2个整数就敲回车,scanf会一直阻塞等待后续输入,直到凑够3个整数,所以没法适配可变数量的输入场景。

解决方法

核心思路

先读取用户输入的一整行内容(用户敲回车就结束输入,不会阻塞),再从该行内容中解析整数,通过解析成功的数量判断用户实际输入了多少个整数。

示例代码

#include <stdio.h>
#include <string.h>

int main() {
    int num_1, num_2, num_3;
    char input_buf[256]; // 定义缓冲区存储整行输入,长度可根据需求调整
    int input_count;

    printf("Enter input: ");
    // 读取整行输入,避免scanf阻塞等待后续输入
    if (fgets(input_buf, sizeof(input_buf), stdin) == NULL) {
        // 处理读取失败的情况
        return 1;
    }

    // 从缓冲区中解析整数,返回值为成功解析的整数个数
    input_count = sscanf(input_buf, "%d %d %d", &num_1, &num_2, &num_3);

    // 根据实际输入的整数个数处理逻辑
    switch(input_count) {
        case 1:
            printf("你输入了1个整数:%d\n", num_1);
            // 此处添加1个整数的业务逻辑
            break;
        case 2:
            printf("你输入了2个整数:%d %d\n", num_1, num_2);
            // 此处添加2个整数的业务逻辑
            break;
        case 3:
            printf("你输入了3个整数:%d %d %d\n", num_1, num_2, num_3);
            // 此处添加3个整数的业务逻辑
            break;
        default:
            printf("输入不合法,请输入1-3个整数\n");
    }

    return 0;
}

方案说明

  • fgets会读取用户输入的整行内容,遇到回车就结束,不会像scanf一样持续等待输入,完美适配用户输入1/2/3个整数后就结束输入的场景
  • sscanf的返回值就是成功解析到的整数数量,你可以根据这个返回值走对应的业务逻辑
  • 缓冲区长度建议设置足够大,避免用户输入过长导致截断问题,如果有超长输入的处理需求,可以额外加判断逻辑处理缓冲区未读完的情况

内容的提问来源于stack exchange,提问作者abacus256

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:36:03