【发布时间】:2015-10-20 20:34:34
【问题描述】:
这个程序中的循环没有像我预期的那样工作:
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;
}
它进入“type z to repeat”,然后结束。当我尝试定义char x='z'; 时,程序第一次运行良好,但最后它循环了2 或4 次,在if 语句中显示所有printf 消息,甚至是else 消息。
我希望程序在循环底部等待输入,然后根据该输入跳出循环或继续循环。为什么不这样做?
【问题讨论】:
-
请修正缩进。没有缩进让代码难以理解。
-
欢迎来到 Stack Overflow。请尽快阅读About 页面。在这里展示代码时,请以适度正统的风格缩进。把它放在编辑框中你想要的样子(忽略预览),然后选择代码并使用编辑框上方的
{}按钮将其缩进四个空格,这使它显示为代码。如果缩进,您的代码将更容易理解。正如最初呈现的那样,它几乎是不可思议的。不要忘记在非提示输出的末尾添加一个换行符(并且在提示的输出末尾添加一个空格)。 -
当您按
y和enter作为输入时.. 它会在您的程序中输入 2 个字符。您将获得第一个y.. 但接下来还有\n。您可以通过使用scanf("%c%*c",&x)强制它忽略新行来修复 -
"even the else ones":你的程序中没有
elses。有 2 个相同的ifs 会产生看似相反的结果。 -
最简单的解决方法是使用
" %c"读取字符;它将忽略空格,包括换行符,并处理下一个不是空格的字符。
标签: c loops while-loop