1

只是学习 C 编程,并坚持我确定的关于 Do/While 循环的一些小事。我有一段代码要求用户按“E”退出程序:

char exitletter;

do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
} while (exitletter !='E');

但是,如果用户输入了错误的字符,它会打印两次“请按 E 退出程序”。如果用户输入say abcd,它会打印五次消息。

有人可以解释一下这里发生了什么吗?

4

2 回答 2

5

那是因为在第一次输入的换行符getchar

考虑您是否按下N然后按下enter键来提供输入方式。实际上,您正在输入两个字符N,一个是换行符 ( \n)。首先将getchar读取并且换行符保留在缓冲区本身中。现在它将打印该语句,然后它会尝试第二次它不会等待您输入,因为缓冲区中已经有一个字符,所以它会读取换行符然后它会检查,这次循环也不会中断,它会打印statemnt,它会在第三次等待用户输入输入。NstdinstdingetcharstdinEgetchar

如果输入的方式getchar就像输入那个字符并按回车键的意思,使用下面的逻辑可以帮助你摆脱这个问题。

do {
    printf ("Please hit E to exit the Program\n");
    exitletter = getchar();
    while(exitletter == '\n')exitletter = getchar();
} while (exitletter !='E');
于 2013-02-02T18:43:53.890 回答
1

虽然迟了一个不同的答案:

您可以fflush在阅读角色后立即致电。

char exitletter;

    do {
        printf ("Please hit E to exit the Program\n");
        exitletter = getchar();
        fflush(stdin);
    } 
    while (exitletter !='E');

这会像你预期的那样工作。

于 2013-02-02T19:10:00.913 回答