2013-03-07 2 views
0

Я пытаюсь написать программу, которая будет читать текстовый файл и выполнять математические операции, которые он читает в текстовом файле.Файл I/O C++ ifstream синтаксис

Пример: + 45 35

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

Я искал более часа для правильного синтаксиса, и я собираюсь вырвать мои волосы.

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

Это то, что я использую, который считывает один символ в то время

char ch; 
inFile >> ch; 

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

+0

Почему 'getline()' не распознается? – ChiefTwoPencils

ответ

4

Есть ли какая-то конкретная причина, по которой вы зацепились за использование блока текста, а не только за чтение значений?

#include <iostream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    istringstream inf(" + 42 100"); 
    char op; 
    int num1, num2; 
    inf >> op >> num1 >> num2; 
    cout << "Op: " << op << endl; 
    cout << "Num1: " << num1 << endl; 
    cout << "Num2: " << num2 << endl; 

    // pin the op-char to the first operand 
    istringstream inf2("-43 101"); 
    inf2 >> op >> num1 >> num2; 
    cout << "Op: " << op << endl; 
    cout << "Num1: " << num1 << endl; 
    cout << "Num2: " << num2 << endl; 
    return 0; 
} 

Выход

Op: + 
Num1: 42 
Num2: 100 
Op: - 
Num1: 43 
Num2: 101 

Если вы хотите сделать это с помощью входного файла гарантированно иметь только оп и два операнда в каждой строке было бы что-то вроде этого:

ifstream inf(fname); 
char op; 
int o1, o2; 
while (inf >> op >> o1 >> o2) 
{ 
    // use your op and operands here. 
    // switch (op)... etc. 
}