Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-嵌套while循环中的Getchar导致无限循环_C - Fatal编程技术网

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

C-嵌套while循环中的Getchar导致无限循环,c,C,我目前正在尝试计算文本文件中不包括行注释(如//comment)的字符数,因此我尝试识别注释的开头(//),并使用while循环读取注释,直到遇到EOF或新行字符,因此我知道注释已结束。问题是,当我使用double while loop()过滤掉行注释时,它会导致一个无限循环,因为它不会退出内部while循环。这是我的密码。有人知道为什么会这样吗?我被难住了 int numChars = 0; int c = 0; int prevc = 0; while ((c = getchar()) !

我目前正在尝试计算文本文件中不包括行注释(如//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个字符。

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

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


您需要使用
&&
,而不是
|
c!='\n'| | c!=EOF
始终为真

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


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

此语句始终正确

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

因此有一个无限循环。

这句话总是正确的

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

因此产生了一个无限循环。

我将它改为c!='\n’&c!=EOF但由于某种原因,在//Hello的输入上,numchars仍然是1,但它应该是0,因为我忽略了所有注释。你知道这是为什么吗?@wanderingstu:因为你数的是换行符。我认为这是正确的;计数应该是1。但我想这取决于作业中的精确要求。但我认为它应该是0,因为在这种情况下,我只是键入一条注释,末尾没有换行符。是这样吗?@wanderingstu:你怎么在没有换行符的情况下输入评论?你没有在评论的末尾按回车键吗?如果您将输入放入一个文件中,几乎肯定会在末尾有一个换行符(使用
hd
查看文件的精确内容。)@wanderingstu如果您不希望“没有换行符的注释”不计算在内,请不要让代码继续执行
numChars++;prevc=cEOF
时,我将其更改为c!='\n’&c!=EOF但由于某种原因,在//Hello的输入上,numchars仍然是1,但它应该是0,因为我忽略了所有注释。你知道这是为什么吗?@wanderingstu:因为你数的是换行符。我认为这是正确的;计数应该是1。但我想这取决于作业中的精确要求。但我认为它应该是0,因为在这种情况下,我只是键入一条注释,末尾没有换行符。是这样吗?@wanderingstu:你怎么在没有换行符的情况下输入评论?你没有在评论的末尾按回车键吗?如果您将输入放入一个文件中,几乎肯定会在末尾有一个换行符(使用
hd
查看文件的精确内容。)@wanderingstu如果您不希望“没有换行符的注释”不计算在内,请不要让代码继续执行
numChars++;prevc=cEOF
时的代码>。