Проверьте наличие нескольких комментариев в текстовом файле и распечатайте их - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь просмотреть текстовый файл, просмотреть его и найти несколько комментариев, начинающихся с # |и заканчиваться на | # и распечатать его.Я использую функцию get для циклического просмотра каждого символа и функцию peek для проверки следующего символа.в настоящее время мой код не распознает конечные комментарии.Пожалуйста, помогите.

Я пробовал перебирать все символы, сравнивая их с несколькими комментариями и сохраняя их в векторе

void Scanner::readingThroughTheFiles(ifstream& inFile)
{
    lineNumber = 0;
    inFile.open(fileName);
    while (!inFile.eof()) {
        char c = '\0';
        while (inFile.get(c)) { // loop getting single characters
            tokens = c;
            isAText(inFile);
            isAWord(inFile);
            // isAComment(inFile);
            if (c == '\n') {
                lineNumber++;
            }
            if (c == '#' && inFile.peek() == '|') {
                char next = inFile.peek();
                multipleComment += c;
                multipleComment += next;
                char c = tokens;
                while (inFile.get(c)) {
                    multipleComment += c;
                    if (tokens == '|' && next == '#') {
                        tokenTypes.push_back(multipleComment);
                        values.push_back("COMMENT");
                        // lineNumbers.push_back(lineNumber);
                        multipleComment.clear();
                    }
                }
            }

1 Ответ

0 голосов
/ 20 января 2019

Проблема в вашем коде здесь:

if (tokens == '|' && next == '#') {

Это условие никогда не может быть истинным, поскольку вы устанавливаете next только один раз (несколько строк выше), и его значение всегда равно |. Смотрите эту строку:

char next = inFile.peek();

И вторая проблема заключается в том, что переменная tokens всегда имеет значение #. Может быть, вы хотите сделать что-то вроде?

if (c == '|' && inFile.peek() == '#') {
    // rest of your code
}

Редактировать: Если вы хотите сохранить номер строки, вы должны также проверить наличие \n во втором цикле while. В противном случае номер вашей строки не будет увеличен, если вы прокомментируете несколько строк.

Но тогда вы должны временно сохранить номер строки перед тем, как войти во второй while цикл. Если вы этого не сделаете, номер строки, который хранится в вашем векторе lineNumbers, всегда будет номером последней строки.

int lineNumberSave = lineNumber;
while (inFile.get(c)) {
    multipleComment += c;
    if (c == '|' && inFile.peek() == '#') {
        // rest of your code
        lineNumbers.push_back(lineNumberSave);
    }
}
...