我是想用户输入的数字不是一个的时候,返回到开始重新输入数字,但是运行时发现无限循环第一个printf,scanf好像是没运行,我不清楚为什么用continue会这样,希望能得到解答
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int magic,guess,counter=0;
int ret;
srand(time(NULL));
magic=rand()% 100+1;
do{
printf("Please guess a number:");
ret=scanf("%d",&guess);
if (ret!=1) continue;
counter++;
if (guess>magic)
printf("Wrong!Too big!\n");
else if (guess<magic)
printf("Wrong!Too Small!\n");
else
printf("Right!\n");
}while (guess!=magic && counter<10);
printf("counter = %d\n",counter);
return 0;
}
当输入字母的时候,由于字母不能被%d接受,所以字母一直卡在stdin里面,造成无限输出
尝试改为
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int magic, guess, counter = 0;
int ret;
char buffer[100];
srand(time(NULL));
magic = rand() % 100 + 1;
do
{
printf("Please guess a number:");
ret = scanf("%d", &guess);
if (ret != 1)
{
printf("ret = %d\n", ret);
scanf("%s", buffer);
continue;
}
counter++;
if (guess > magic)
printf("Wrong!Too big!\n");
else if (guess < magic)
printf("Wrong!Too Small!\n");
else
printf("Right!\n");
} while (guess != magic && counter < 10);
printf("counter = %d\n", counter);
return 0;
}
,缺点是键入ctrl+z时需要输入任意字符以进入下一次读取
有帮助望采纳~