gpt4 book ai didi

c - else 语句总是在 if 和 if else 之后运行

转载 作者:行者123 更新时间:2023-11-30 20:23:45 24 4
gpt4 key购买 nike

#include <stdio.h>
int main(int argc, const char * argv[]) {
//run...
printf("----------------CALC--------------\n");
printf("(1) Type in a letter to get a secret message: ");
int validSecret = 0;
char secretLetter;
while(validSecret == 0){
scanf("%c",&secretLetter);
if(secretLetter == 'b'){
printf("B\n");
}
else if (secretLetter == 'r'){
printf("R\n");
}
else if (secretLetter == 'k'){
printf("K\n");
}
else {
printf("Game over\n");
validSecret = 1;
}
}
return 0;
}

如果我输入 a b if 语句会正确执行并打印 B 和新行,但也会打印游戏结束。它正在运行 if 和 else...这没有意义。

最佳答案

您输入的换行符(对应于'\n'字符)与任何其他条件都不匹配;当然,您的代码将因此采用 else 分支。

stdin 是否有可能到达 EOF?您的代码忽略返回值,因此无法检测到此类情况...它应该看起来更像:

while (scanf("%c", &secretLetter) == 1) {
if (secretLetter == 'b') {
printf("B\n");
}
else if (secretLetter == 'r'){
printf("R\n");
}
else if (secretLetter == 'k'){
printf("K\n");
}
else if (secretLetter != '\n') {
printf("Game over\n");
break;
}
}

注意我如何将您的 else 转换为 else if (secretLetter != '\n') 吗?这应该可以防止当 secretLetter\n 时打印“Game over”,解决第一个问题...

还请注意我如何使循环的终止条件与 scanf 的失败相匹配?这应该可以防止当 stdin 到达 EOF 时循环继续。您可能需要将 printf("Game over\n"); 移至循环外部以解决此问题。

这里不需要用中间变量来代替 break;您应该不惜一切代价避免不必要的困惑。

关于c - else 语句总是在 if 和 if else 之后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com