C中的简单循环代码

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.

我希望程序等待循环底部的输入,并打破循环或继续基于该输入循环.为什么不这样做?

cad*_*luk 5

  1. 如果输入一个字符,则会隐式输入另一个字符:换行符,它会部分导致奇怪的行为.这可以通过更换格式字符串被忽略"%c""%c%*c".

  2. 你检查了'y'两次.'y'用a 替换第二个'n'.

  3. 不影响程序的操作,但可以提高性能:if用一个替换第二个else if.if如果第一个句子的计算结果为true,这将使程序甚至不测试第二个子句的条件.

  4. 你不检查另一个字符而不是yn.无论是添加一个单独的else或,而不是我的第3点,替换第二if通过else1.


1正如@JonathanLeffler在评论中提到的这个答案