为什么这个getchar()不能正常工作?

时间:2016-01-07 17:22:10

标签: c

有人可以告诉我为什么第o = getchar();行只在第一次正常工作,然后一旦工作,一旦不工作?

#include <stdio.h>

int main(void)
{
    char o;

    for (int i = 1; i > 0; i++)
    {
        printf("%d\n", i);

        if (i % 10 == 0)
        {
            printf("Do you want to continue? (y/n): ");
            o = getchar();
            if (o == 'n')
                break;
        }
    }

    return 0;
}

2 个答案:

答案 0 :(得分:4)

首先,getchar()会返回int,这可能不适合char。变化

char o;

int o = 0;

然后,为了实现跳过,它实际上并没有跳过。当您按任意键并按 ENTER 时,按 ENTER 键的newline将作为每秒getchar()的馈送迭代循环。

答案 1 :(得分:0)

Events: insert所述,问题是换行符。在控制台中输入内容后再按“Enter”键,文本就会出现在输入缓冲区中。然后由getchar读取此缓冲区。但是,getchar仅在每次调用时读取一个字符。问题是,“Enter”被解释为一个字符('\n')并保留在缓冲区中,getchar将其作为单个字符读取。 getchar的下一个调用将读取换行符,而不是想要的字符。

解决方案:您可以调用getchar(在实际调用之后),直到达到换行符,从而清除缓冲区内的读取行。

while (getchar() != '\n')
    ;

或者只是建立一个小功能

int nextch() {
    int ch = getchar();
    while (getchar() != '\n')
        ;
    return ch;
}