| Цитата(Linchx @ 25.8.2011, 21:32) | Привет, всем!
Собственно проблема, написал программу по вычислению выражения, все работает, только есть но, когда вводишь выражения с пробелами программа разбирает его на новые строки, т.е. входное выражение 5 + 5 на выходе получается 5 = 5 + = error 5 = 5
хотел написать ограничение на ввод таких выражений, а именно если на вход идет выражение с пробелами то его пропустить. Начал искать как можно это сделать, наткнулся на манипулятор и оператор :
| Код | #include <fstream> //подключение стандартной библиотеки для работы с файлами #include <cmath> //подключение стандартной библиотеки математических операций #include "syntax.cpp" //подключение анализатора выражения
char *prog; // содержит анализируемое выражение void eval_exp(double *answer); // функция обработки выражения
int main(void) { std::ifstream fin("input.txt",std::ios::in); // входной файл std::ofstream fout("output.txt",std::ios::out); // выходной файл fin.setf(std::ios::skipws);
double answer; static char buff[100]; // объявление статического символьного массива static char *p = buff; // объявление указателя на массив char uncalc[100]; if ( fin == NULL ){ perror( "Error opening file" ); // проверка существования файла } else { do { fin >> uncalc; if(!fin.fail()) fout << p << " = error" << std::endl; // исключение выражения с пробелом if else(*p>='a' && *p<='z') fout << p << " = error" << std::endl; // (собственно это условие не нужно,если присутствует skipws) условие отсеивания входного выражения на предмет ввода некорректных данных else{ prog = p; if(!*prog) break; eval_exp(&answer); // вызов функции для вычисление входного выражения } if(std::isnan(answer)) fout << p << " = error" << std::endl; // проверка результата обработки выражения на предмет ошибки вычисления (Not-a-number) else{ fout << p << " = " << answer << std::endl; // запись результата в файл } } while(!fin.eof()); } fout.close(); return 0; }
|
но увы не работает, программа попросту начинает дублировать выражения в файл с ответом подставляя то "error" то "0". В чем проблема не могу понять. |
Так с пробелами я справился, вот теперь другое, как можно из string передать выражение в указатель массива, массив является константой или же есть возможность перезаписи файла input.txt на исправленное выражение? |