Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scanf未等待整数输入_C_Scanf_Infinite Loop_Turbo C - Fatal编程技术网

scanf未等待整数输入

scanf未等待整数输入,c,scanf,infinite-loop,turbo-c,C,Scanf,Infinite Loop,Turbo C,我试图阻止用户输入字符类型的数据。但是,在提示“请输入整数:”之后,它不会等待输入。因此,每当我在第一个提示下输入一个字母时,它就会进入一个无限循环。我该如何解决这个问题?任何帮助都将不胜感激 您的%整数应声明为int。 就像这样: printf("Enter an integer: "); status = scanf("%d", &integer); if (status == 0){ do{ printf("Please enter an integer:

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

您的%整数应声明为int。 就像这样:

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

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

首先需要清理缓冲区,可以使用
fflush(stdin)如下所示:

int integer;

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

 scanf("%d", &integer);
int integer, status=0;
if (status == 0)
{
    do
    {
        printf("\nPlease enter an integer: ");
        status = scanf("%d", &integer);
        fflush(stdin);
    }
    while (status == 0);
}
使用
fflush(stdin)
不在标准C中,但可以用其他方式清理缓冲区

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

int integer;

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

 scanf("%d", &integer);
int integer, status=0;
if (status == 0)
{
    do
    {
        printf("\nPlease enter an integer: ");
        status = scanf("%d", &integer);
        fflush(stdin);
    }
    while (status == 0);
}
要清洁屏幕,请调用此函数:

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

void clrscr()
{
    system("@cls||clear");
}
#包括
void clrsc()
{
系统(“@cls | | clear”);
}
void flushKeyBoard()
{
int ch;//要将数据读入的变量
而((ch=getc(stdin))!=EOF&&ch!='\n');
}
int main()
{
整数,状态=0;
如果(状态==0)
{
做
{
printf(“\n请输入一个整数:”);
status=scanf(“%d”&整数);
刷新键盘();
clrsc();
}
而(状态==0);
}
}

您需要以某种方式读取非数字。
“%d”
永远不会读取它。或者将看到它,识别它不是一个数字并停止,让它等待下一次尝试。@klutt,我也已经检查过了,但出现错误是因为scanf存储了回车符(在提示后按enter键)。我认为它不适用于此项,因为%d会自动跳过空格。即使您修复了循环,代码也不会检测到用户输入类似
5x
的内容。是的,我确实将其声明为整数,只是无法在帖子上显示。但它仍然不起作用,这不是问题所在。输入缓冲区中有上一次尝试的剩余字符。嘿,它可以工作。但在输入第一个不正确的数据后,它会打印两次“请输入整数”。你知道如何修复它吗?
Do{printf(“请输入一个整数”);status=scanf(“%d”(&integer);}
=>
printf(“请输入一个整数”);do{status=scanf(“%d”,&integer);}
@LenovoGenovia我将编辑我的answer@LenovoGenovia只是一个友好的建议。谷歌搜索错误消息是程序员每天做的事情。习惯它。@LenovoGenovia您只需要#include,也许是clrsc()函数,搜索其他函数来清理屏幕。