C - Getchar во вложенном цикле while, вызывая бесконечный цикл - PullRequest
0 голосов
/ 10 февраля 2019

В настоящее время я пытаюсь подсчитать количество символов в текстовом файле, за исключением комментариев к строке (например, // комментарий), поэтому я пытаюсь определить начало комментария (//) и использовать цикл while для чтениякомментарий, пока я не столкнусь с EOF или символом новой строки, таким образом, я знаю, что комментарий закончился.Проблема в том, что когда я использую двойной цикл while () для фильтрации строковых комментариев, это вызывает бесконечный цикл, потому что он не будет выходить из внутреннего цикла 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 голосов
/ 10 февраля 2019

Это утверждение всегда верно.

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

Отсюда бесконечный цикл.

0 голосов
/ 10 февраля 2019

c != '\n' || c != EOF всегда верно.

Это может быть ложным, только если оба условия были ложными, что означало бы, что оба значения c == '\n' и c == EOF были истинными.Очевидно, что эти два не могут быть истинными (если только EOF не совпадает с '\n', что не является).

Вам необходимо использовать &&, а не ||.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...