我正在尝试制作一个程序,让用户尝试猜测程序随机选择的字母。循环和if语句似乎不起作用。如果有人可以检查一下我的代码,那就太好了。
我将附上输出图片。
int main()
{
srand(time(NULL));
char randlett, playerlett;
int tries = 0;
randlett = rand() % 26 + 97;
printf("The program choose a letter\n\n");
while (tries < 5){
printf("Try number %d\nPick a letter\n", tries + 1);
scanf("%c", &playerlett);
if (randlett != playerlett){
if (playerlett > randlett){
printf("\nThe letter is before the one you chosen\n");
}
else{
printf("\nThe letter is after the one you chosen\n");
}
tries ++;
continue;
}
else{
printf("You win");
break;
}
}
return 0;
}
答案 0 :(得分:0)
scanf("%c", &playerlett);
到目前为止,scanf
正在消耗先前输入的\n
(按下)。
将其更改为
scanf(" %c", &playerlett);
^-------------------------//Extra space
或
scanf("%c", &playerlett);
getchar();
答案 1 :(得分:-1)
kiran Biradar的answer的补充:
使用scanf("%c", &playerlett);
并输入字符时,必须按 Enter 。问题在于,此 Enter 是字符'\n'
,在scanf
循环的下一个交互中,它用作while
的下一个输入。因此,我们必须使程序忽略此'\n'
(基本上是空格,制表符或输入项)。
这可以通过简单地将初始scanf
更改为scanf(" %c", &playerlett);
来完成。通过添加额外的空格,您正在“告诉”程序忽略空格,制表符或输入,而仅将其他字符视为输入。因此,您可以将以下行:scanf("%c", &playerlett);
更改为:
scanf(" %c", &playerlett); // this is probably the best solution
其他选项(尽管第一个是最好的):
写这个:
scanf("%c", &playerlett); // this receives the letter eg 'q'
getchar(); // this receives the <Enter>, the '\n'
或者与此非常相似:
playerlett=getchar(); // this receives the letter eg 'q'
getchar(); // this receives the <Enter>, the '\n'
不应该使用的替代方法:在fflush(stdin)
之后添加scanf("%c", &playerlett);
以清除缓冲区,基本上是“告诉”程序以忘记诸如'\n'
这样的字符在第一个字符后输入:(不建议这样做,请参见this answer):
scanf(" %c", &playerlett); // this receives the letter eg 'q'
fflush(stdin); // this "forgets" the <Enter>, the '\n'
有关更多信息,请参见:scanf() leaves the new line char in the buffer。