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

C语言中如何无需按回车换行,使用scanf输入整数?

无需回车换行实现C语言控制台输入

情况1:仅需空格分隔输入(无需每次回车)

你的现有代码已经支持这种输入方式,因为scanf("%d")会自动忽略输入中的空白字符(包括空格、换行、制表符)。你可以直接连续输入数字,用空格分隔,最后输入-1后按一次回车即可结束输入,无需每个数字后都按回车。

比如直接输入:

1 2 3 4 -1

按回车后,程序就能正确读取所有数字并输出对应的数组。

情况2:实时输入(输入数字后立刻处理,无需等待回车)

如果需要输入单个数字后立刻被程序读取(不用等回车或空格),则需要使用非缓冲输入函数——因为scanf依赖行缓冲,默认要等回车才会将输入传递给程序。以下是使用getchar()实现的示例代码:

#include <stdio.h>
#include <ctype.h>

#define SIZE_MAX 256
#define END_INPUT -1

int main() {
    int tab[SIZE_MAX], size = 0;
    int num = 0, sign = 1;
    char c;

    printf("Enter the different elements of the table\n");
    printf("(%d to end)\n", END_INPUT);

    while (size < SIZE_MAX) {
        // 跳过空白字符(空格、换行等)
        while ((c = getchar()) != EOF && isspace(c)) {
            continue;
        }
        if (c == EOF) break;

        // 处理负号与结束符-1
        sign = 1;
        if (c == '-') {
            char next_c = getchar();
            if (next_c == '1') {
                // 检测到-1,结束输入
                break;
            }
            sign = -1;
            ungetc(next_c, stdin);
            c = getchar();
        }

        // 拼接数字
        num = 0;
        while (isdigit(c)) {
            num = num * 10 + (c - '0');
            c = getchar();
        }
        num *= sign;

        tab[size++] = num;

        // 将非数字字符放回输入流(避免丢失后续输入)
        if (!isspace(c) && c != EOF) {
            ungetc(c, stdin);
        }
    }

    printf("Tableau de size %d :\n", size);
    for (int i = 0; i < size; i++) {
        printf("%d ", tab[i]);
    }
    printf("\n");

    return 0;
}

代码说明:

  • 用getchar()逐个读取输入字符,跳过空白字符;
  • 手动处理数字的符号和每一位,拼接成完整整数;
  • 输入-1时直接结束输入,无需回车;
  • 支持实时输入,输入完一个数字后程序立刻读取,不需要等待回车或空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:21:02