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