scanf不等待整数输入

时间:2018-08-14 00:11:05

标签: c scanf infinite-loop turbo-c

$headerDiv = $('.header-wrapper');
$rowDiv = $('html');
$rowDiv.scroll(function(e) {
    $headerDiv.css({
        left: -$rowDiv[0].scrollLeft + 'px'
    });
});

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

2 个答案:

答案 0 :(得分:0)

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

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语言中,但是您可以通过其他方式清理缓冲区。

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

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);
    }
}

答案 1 :(得分:-2)

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

int integer;

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

 scanf("%d", &integer);