scanf 不等待整数输入

scanf is not waiting for an integer input

printf("Enter an integer: ");
status = scanf("%d", &integer);

if (status == 0){
    do{
        printf("Please enter an integer: ");
        status = scanf("%d", &integer);
    }
    while (status == 0);
}

我试图阻止用户输入字符类型的数据。但是,在提示 "Please enter an integer: " 之后,它不会等待输入。因此,每当我在第一个提示符下输入一个字母时,它就会进入无限循环。我该如何解决?任何帮助将不胜感激!

您的 %integer 应该声明为 int。 像这样:

int integer;

 printf("Please input an integer value: ");

 scanf("%d", &integer);

你需要先清理缓冲区,你可以这样使用fflush(stdin);

int integer, status=0;
if (status == 0)
{
    do
    {
        printf("\nPlease enter an integer: ");
        status = scanf("%d", &integer);
        fflush(stdin);
    }
    while (status == 0);
}

它不在标准 C 中使用 fflush(stdin) 但您可以通过其他方式清理缓冲区。

您可以构建自己的函数来清理缓冲区,如下所示:

void flushKeyBoard()
{
    int ch; //variable to read data into
    while((ch = getc(stdin)) != EOF && ch != '\n');
}

要清洁屏幕调用此函数:

void clrscr()
{
    system("@cls||clear");
}

最终代码:

#include <stdio.h>

void clrscr()
{
    system("@cls||clear");
}
void flushKeyBoard()
{
    int ch; //variable to read data into
    while((ch = getc(stdin)) != EOF && ch != '\n');
}
int main()
{
    int integer, status=0;
    if (status == 0)
    {
        do
        {
            printf("\nPlease enter an integer: ");
            status = scanf("%d", &integer);
            flushKeyBoard();
            clrscr();
        }
        while (status==0);
    }
}