scanf导致循环提前终止

jat*_*ora 3 c c++

c='q';
while(c=='q')
 {
   printf("hello");
   scanf("%c",&c);
 }
Run Code Online (Sandbox Code Playgroud)

为什么循环在没有任何理由的情况下退出输入?

T.J*_*der 6

循环没有理由退出.该scanf调用将从中读取一个字符stdin并将其存储c,从而改变其值c.当测试循环条件时,可能c不再== 'q'(例如,您键入"q"以外的其他内容).

如果你试图循环,直到用户没有输入"q":

do {
    printf("hello");
    scanf("%c", &c);
}
while (c != 'q');
Run Code Online (Sandbox Code Playgroud)

但请注意,在大多数控制台系统上,scanf只有在用户键入完整的文本行并按下回车键后才会返回.如果您希望按键进行操作,则可能需要查看其他功能.