此问题已在此处有答案:
scanf() leaves the newline character in the buffer(7个回答)
7天前关闭
首先,我是C的新手。我在写一个猜谜游戏。这很简单,你只是猜测,直到你找到程序在“no_to_guess”变量中保存的数字。问题是,如果我把变量的类型,字符程序打印“猜测数字”提示两次,但当我改变它回到int类型,它都正常工作。你们知道吗?
int main(){
int no_to_guess = 5,guess;
while(guess != no_to_guess){
printf("Guess a number: ");
scanf("%d",&guess);
if(guess == no_to_guess) printf("You Won");
}
return 0;
}
int类型没有问题,但是当我将变量更改为char类型时,程序会提示用户两次猜测。我知道使用char类型没有意义,但我只是想知道为什么会发生这种情况。
char no_to_guess = '5',guess;
while(guess != no_to_guess){
printf("Guess a number: ");
scanf("%c",&guess);
if(guess == no_to_guess) printf("You Won");
}
对于char类型,它提示:猜数字:猜数字:对于int类型,它的工作原理是:猜数字:
1条答案
按热度按时间x6yk4ghg1#
1.你需要初始化guess,或者只在你读了一些输入后检查它。
1.与
"%d"
不同,格式字符串"%c"
不会忽略空白,因此您希望使用格式字符串" %c"
来实现类似的行为。1.特别检查I/O操作的返回值总是一个好主意。如果
scanf()
失败,您将在未初始化的数据上进行静默操作。1.我将
guess != no_to_guess
和guess == no_to_guess
重构为一个测试(如果您愿意,也可以在break
之前打印“You Won”)。1.顺便说一句,在即将到来的C 2023(或者如果你的编译器支持扩展),而不是
char guess;
,你可以通过做typeof(no_to_guess) guess;
来减少重复并确保相同的类型。示例会话: