getline не игнорирует новую строку, так что размер строки имеет один дополнительный - PullRequest
0 голосов
/ 23 октября 2019

Я работаю над домашним заданием, чтобы оценить выражение из файла, но по какой-то причине, когда я использую getline (имя файла, строковая переменная), строка имеет дополнительный ввод. Я знаю, потому что, когда я вывел строку, она пришла с новой строки. И когда я проверяю length () строки, она всегда на единицу больше, чем фактический размер строки, но я не могу избавиться от лишнего пространства в конце. Последняя строка во входном файле работает просто отлично, хотя я предполагаю, что у нее нет ввода в конце. Функция оценки просто оценивает строку. Проблема связана с моей функцией проверки ошибок, где обнаружение ошибок зависит от длины строки. Таким образом, он выводит «error», потому что он не работает с неверной длиной строки, которая на единицу больше, чем фактическая длина.

ifstream input("input31.txt");
    string line;
    if (input.eof()) {
        cout << "is empty";
        input.close();
    }
    else {


        string line;
        while (!input.eof()) {
            getline(input, line);
            cout << line.length();
            }
        }
        input.close();
    }

Я попытался определить, есть ли в строке '\ n', но он по какой-то причине не обнаружил. Простите, если я сделал глупую ошибку с этим, как я обычно делаю. Я все еще новичок в кодировании, и это помогает мне иметь дополнительные глаза.

edit: Вот ввод, который я использую.

0*00000000000000000+0000000000000001
(1+2)*(1000+2000)
(+1+2)*(1000+2000)
((1+2)*(1000+2000))*(1+10000)
(1000000000000000-1)
99999999999999999/99999999999999999
(-100000+10000)*8
((-1))-(-1)

edit: я тожеиспользуя xcode на Mac, если это имеет какое-либо значение.

...