我目前正在尝试计算文本文件中不包括行注释(例如// 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个字符。
答案 0 :(得分:2)
c != '\n' || c != EOF
始终为真。
只有两个条件都为假,才可能为假,这意味着c == '\n'
和c == EOF
都为真。显然,这两个不能都成立(除非EOF
与'\n'
相同,但并非如此)。
您需要使用&&
,而不是||
。
答案 1 :(得分:1)
这句话永远是真的。
while (c != '\n' || c != EOF)
发生无限循环。