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

标签 c

我目前正在尝试计算文本文件中不包括行注释(如//comment)的字符数,因此我正在尝试识别注释的开头 (//) 并使用 while 循环读取评论直到我遇到 EOF 或换行符,因此我知道评论已经结束。问题是,当我使用双 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 个字符。

最佳答案

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

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

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

关于C - 嵌套 while 循环中的 Getchar 导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612471/

相关文章:

c - 如何在 C 中使用动态多维数组?

c - 需要左值作为赋值的左操作数......?

c - 在不使用数组的情况下将指向字符的指针(在为其分配字符串之后)传递给方法并修改此字符串是否适用,为什么不呢?

c - 创建我们自己的头文件有什么用处

c - 在 Linux 中从管道或套接字中丢弃数据的最佳方法?

c - 在 C 模块中传递整数值

创建文件到数组函数

c - C 是否检查 && 语句中的第二个 bool 语句

c - scanf 读取 "Enter"键

c - 将 const char* 传递给函数时丢失数据