2016-03-04 5 views
0

Я новичок в C++ и пытаюсь преобразовать следующие операторы в цикл выражений, считанных из файла. Следующая серия заявлений отлично работает, когда я поставляю ввод с терминала:Как превратить это в цикл?

int main() 
{ 
    Expression* expression; 
    char paren, comma; 
    cout << "Enter expression: "; 
    cin >> paren; 
    expression = SubExpression::parse(); 
    cin >> comma; 
    parseAssignments(); 
    cout << "Value = " << expression->evaluate() << endl; 

    return 0; 
} 

Но вместо передачи в выражении от cin, который я должен войти в терминале, я хотел бы прочитать файл построчно и передать его в программу (которая заканчивается символом новой строки).

Я пробовал делать следующее, но программа блокируется на cin. Любые предложения по изменению моего кода для этого?

int main() 
{ 
    ifstream inFile; 
    inFile.open("input.txt", ifstream::in); 

    string line; 
    while(inFile.good()) 
    { 
     Expression* expression; 
     char paren, comma; 
     cin >> line; 
     paren = line[0]; 
     expression = SubExpression::parse(); 
     cin >> line; 
     comma = line.back(); 
     parseAssignments(); 
     cout << "Value = " << expression->evaluate() << endl; 
    } 

    inFile.close(); 
} 

ответ

3

Вы хотите прочитать из файла, поэтому используйте inFile вместо cin.

int main() 
{ 
    ifstream inFile; 
    inFile.open("input.txt", ifstream::in); 

    string line; 
    while(inFile.good()) 
    { 
     Expression* expression; 
     char paren, comma; 
     inFile >> line; // change this line 
     paren = line[0]; 
     expression = SubExpression::parse(); 
     inFile >> line; // change this line 
     comma = line.back(); 
     parseAssignments(); 
     cout << "Value = " << expression->evaluate() << endl; 
    } 

    inFile.close(); 
} 
+0

Извините, если это глупый вопрос, но то, что делает '' >> делать, когда в паре с 'inFile'? Это труба? –

+0

Это [перегруженный оператор] (http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/) для чтения и хранения данных. – MikeCAT

+0

@free_mind: Он делает то же самое, что и с 'cin', за исключением того, что он получает свои символы из файла вместо терминала. –

2

Вы можете использовать Oldschool стиля Си

FILE *fp = fopen("file.txt", "r"); 
char buffer[5000]; 
while(fgets(buffer,5000,fp) != NULL){ 
//do something with line 'buffer' 
} 
fclose(fp); 

Ps: извиняюсь за короткий ответ я нахожусь на мобильном

также в зависимости от вашей операционной системы, fgets может включать в себя новый символ строки в буфере после чтения каждой строки.

0

cin читает стандартный ввод, который обычно является терминалом. Чтобы прочитать из файла, вам нужно использовать переменную inFile, где вы используете cin.

0

Предположим, у вас есть файл с именем input.txt, попробуйте следующий код:

#include<iostream> 
#include<string> 
#include<fstream> 

int main() 
{ 
    std::ifstream fin("input.txt",std::ifstream::in); 
    std::string line; 

    while(getline(fin, line)) 
    { 
     std::cout<<line<<"\n"; 
    } 

    fin.close(); 

    return 0; 
} 
Смежные вопросы