Рейтинг:
1
Rick York
Во-первых, вы должны переместить объявление объекта выходного файла за пределы цикла while. Вам не нужно создавать его и открывать файл для каждой строки, которую Вы читаете из входного файла. Он должен быть построен один раз и оставлен открытым, пока вы читаете входные данные.
Линия только с "пробелами" неясна. Это, скорее всего, вызовет ошибку компиляции.
Еще одна вещь, эта строка, скорее всего, также вызовет ошибку компиляции :
double abc = p ["abc"];
Это выглядит подозрительно, но трудно понять, не видя определения класса синтаксического анализатора.
Leigh Omar Alpha
большое вам спасибо, Рик Йорк, теперь он прочитал все строки . у меня тоже есть проблема, когда я представил --------- в отдельной линии, это дает мне ошибку компилятора.пожалуйста, если вы можете помочь мне найти способ, что компилятор пропустит этот--------- и только recongnizes выражения.
Rick York
Это не проблема компилятора. Это логическая проблема. Попробуйте сравнить вашу входную строку с "- - - - " - используя сравнение с ограниченной длиной. В мире C будет использоваться функция strncmp. Я не знаю, каков будет соответствующий метод сравнения std::string, но это то, что вы должны использовать. Вы можете использовать strncmp и передать его inputLine.c_str (), если хотите. Код будет выглядеть следующим образом:
inputLine = trim (removeBackspaces (inputLine));
if( strncmp( "----", inputLine.c_str(), 4 ) == 0 )
continue; // don't process this one - read another
Rick York
Еще одна вещь, второе утверждение while должно быть if. Что-то вроде этого :
if( file.eof() )
break;
Вообще-то, на вашем месте я бы просто прокомментировал эту строчку для начала. Если getline терпит неудачу, это означает, что вы находитесь в конце файла, поэтому дополнительная проверка не требуется. Дело в том, что я все время пишу Парсеры файлов и никогда не проверял EoF. Я всегда использую fgets (C-эквивалент getline) и цикл до тех пор, пока он не выйдет из строя для разбора строк. Для символьного синтаксического анализа я читаю по одному символу за раз до отказа. Я никогда не видел необходимости проверять наличие EoF.
Leigh Omar Alpha
кроме того, когда у меня есть выражение, которое имеет двоичный и шестнадцатеричный вид
----
Пи = 3,14
радиус = 3
sin( pi / 2 ) + pi * radius ^ 2 + 0x1F - 1100b
он будет отмечать calculte из-за двоичных и шестнадцатеричных значений.
я хочу, чтобы входной файл распознавал двоичные и шестнадцатеричные числа и преобразовывал их в десятичные или целочисленные, чтобы мое выражение было вычислено . это сейчас моя главная проблема.