扫描整数的基本 while 循环

Basic while loop to scanf an integer

我正在尝试创建一个 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,不能使用全局变量

如果输入字符与转换不匹配,它会留在输入流中,影响下一次读取 - 您必须使用 getcharfgetc 删除它.

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

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

解决您当前问题的一个更简单的方法是在每个 scanf("%d") 之后添加一个 getchar()。此代码将起作用。

#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); 是 wrong.It 应该是

printf("Enter integer \n");