基本while while循环扫描整数

时间:2018-05-05 21:01:03

标签: c stdio

我正在尝试创建一个C程序,允许用户输入大于0的整数,但如果输入任何其他类型,则让用户再次尝试,直到输入整数。

int minBet;

printf("Enter integer"\n);

while(scanf("%d",&minBet)!=1)
{
    printf("Must be an integer value greater than 0\n");
    scanf(" %d",&minBet);
}

当输入非整数值时,printf语句无限循环。我怎么解决这个问题?

只能使用stdio.h和NO全局变量

2 个答案:

答案 0 :(得分:1)

如果输入字符与coversion不匹配,则它会在输入流中留下以填充下一个读取 - 您必须使用getcharfgetc来删除它。 / p>

while ( scanf( “%d”, &minBet ) < 1 )
{
  getchar();
  printf( “You entered a non-numeric value, try again: );
}

答案 1 :(得分:0)

当您输入 e 时,键入 e ,然后按ENTER键。所以输入缓冲区中现在有2个字符。 scanf("%d")读取 e ,但换行符仍在输入缓冲区中。

对您当前问题的一个更简单的解决方案是在每个getchar()之后添加scanf("%d")。这段代码可行。

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

int main(void)
{
    int minBet;

printf("Enter integer \n");

while(scanf("%d",&minBet)!=1)
{
    getchar(); 
    printf("Must be an integer value greater than 0\n");
}
}

此外,您的代码printf("Enter integer"\n);是错误的。它应该是

printf("Enter integer \n");