0 c loops while-loop
这个程序中的循环不能像我期望的那样工作:
int main() {
char userresponse;
char x;
do {
printf("are you human");
scanf("%c", &userresponse);
if (userresponse == 'y') {
printf("welcome");
}
if (userresponse == 'y') {
printf("please leave");
}
printf("type z to repeat");
scanf("%c", &x);
} while (x == 'z');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它得到"键入z重复",然后它完成.当我尝试定义char x='z';程序时第一次运行正常,但最后它循环播放2或4次,在语句中显示所有printf消息,甚至是else那些消息if.
我希望程序等待循环底部的输入,并打破循环或继续基于该输入循环.为什么不这样做?
如果输入一个字符,则会隐式输入另一个字符:换行符,它会部分导致奇怪的行为.这可以通过更换格式字符串被忽略"%c"用"%c%*c".
你检查了'y'两次.'y'用a 替换第二个'n'.
不影响程序的操作,但可以提高性能:if用一个替换第二个else if.if如果第一个句子的计算结果为true,这将使程序甚至不测试第二个子句的条件.
你不检查另一个字符而不是y或n.无论是添加一个单独的else或,而不是我的第3点,替换第二if通过else1.
1正如@JonathanLeffler在评论中提到的这个答案