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
相关产品推荐
相关产品推荐

