C-嵌套的while循环中的Getchar导致无限循环

时间:2019-02-10 01:14:03

标签: c

我目前正在尝试计算文本文件中不包括行注释(例如// comment)的字符数,因此,我尝试标识注释的开始(//)并使用while循环读取注释,直到遇到EOF或换行符为止,因此我知道注释已结束。问题是当我使用double while loop()过滤掉行注释时,它将导致无限循环,因为它不会退出内部while循环。这是我的代码。有谁知道为什么会这样吗?我很沮丧

int numChars = 0;
int c = 0;
int prevc = 0;

while ((c = getchar()) != EOF) {
        if (c == '/' && prevc == c) {
            while (c != '\n' || c != EOF) {
                c = getchar();
            }
        }

    numChars++;
    prevc = c;
}

例如,如果文本文件包含// Hello,则应输出0个字符,而如果文本文件包含Hello,则应输出5个字符。

2 个答案:

答案 0 :(得分:2)

c != '\n' || c != EOF始终为真。

只有两个条件都为假,才可能为假,这意味着c == '\n'c == EOF都为真。显然,这两个不能都成立(除非EOF'\n'相同,但并非如此)。

您需要使用&&,而不是||

答案 1 :(得分:1)

这句话永远是真的。

while (c != '\n' || c != EOF)

发生无限循环。