如何在 C 中使用 getchar() 和无限循环创建一个需要数字输入的程序,该输入在键入非数字字符后退出

How to create a program that requires number inputs that exits after typing a non-numeric character, using getchar() and infinite loop in C

提问人:Tiến Đạt Lê 提问时间:4/28/2023 最后编辑:wohlstadTiến Đạt Lê 更新时间:4/28/2023 访问量:42

问:

一个作业要求我们在 C 语言中创建一个程序,该程序仅要求用户输入数字,使用 getchar() 和带有 while(1) 的无限循环,该程序在键入非数字字符后停止。

这是我的尝试:

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

int main(){
    while(1){
        int x = getchar();
        if (isdigit(x) == 0){
            break;  
        };
    };
    return 0;
}

但是当我运行代码并键入任何内容时,无论我键入什么,它都会在第一次尝试后停止。

您能找到一种方法来纠正上面的代码吗?

c while-loop 无限循环 getchar

评论

0赞 Some programmer dude 4/28/2023
OT:只有在非块语句之后才需要分号。在阻止之后,它被视为空语句。;{}
0赞 Some programmer dude 4/28/2023
至于你的问题,你认为键添加到输入缓冲区的换行符会发生什么?今天的课程:了解如何调试程序。就像使用调试器在监视变量及其值时逐行单步执行代码一样。Enter
1赞 Support Ukraine 4/28/2023
“第一次尝试后会停止”不,不会。添加 Just After 并给出输入,你会看到循环执行了 4 次printf("%d\n", x);getchar123<enter>
0赞 Support Ukraine 4/28/2023
换言之...该程序完全按照您的描述进行操作。但也许描述缺少类似“只有数字和换行符”之类的内容

答:

0赞 Allan Wind 4/28/2023 #1

stdin默认情况下,是 line buffered,这意味着在您按 之前,您的程序不会接收到输入。如果你对整个换行符做一些类似的事情(双关语):<enter>

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

int main(void) {
    for(;;) {
        int x = getchar();
        if(x == '\n')
            continue;
        if (!isdigit(x))
            break;
    }
}