2010-03-17 2 views
1

Так что я пишу программу, которая занимается чтением и записью в файл. Я использую функцию getline(), потому что некоторые из строк в текстовом файле могут содержать несколько элементов. До сих пор у меня никогда не было проблем с getline. Вот что я получил.C++ help с функцией getline с ifstream

Текстовый файл выглядит следующим образом:

John Smith      // Client name 
    1234 Hollow Lane, Chicago, IL // Address 
    123-45-6789      // SSN 
    Walmart       // Employer 
    58000       // Income 
    2        // Number of accounts the client has 
    1111        // Account Number 
    2222        // Account Number 

И такой код:

ifstream inFile("ClientInfo.txt"); 
if(inFile.fail()) 
{ 
    cout << "Problem opening file."; 
} 
else 
{ 
    string name, address, ssn, employer; 
    double income; 
    int numOfAccount; 

    getline(inFile, name); 
    getline(inFile, address); 
    // I'll stop here because I know this is where it fails. 

Когда я отлажена этот код, я обнаружил, что имя == «Джон», вместо имени == «Джон Смит», а также адрес == «Смит» и т. Д. Я делаю что-то неправильно. Любая помощь приветствуется.

+1

Эта программа компилируется и работает так, как ожидалось для меня. Вы уверены, что раньше у вас не было чего-то типа 'cin >> name; cin >> address; ', который вы заменили на' getline', и просто забудьте сохранить исходный файл и/или перекомпилировать программу перед повторным тестированием? –

+0

WFM (работает для меня). Я вставлял ваш код в исходный файл, добавлял различные включительные и префиксы 'std ::', вставлял текст в файл 'ClientInfo.txt' (удаляя // комментарии), добавлял строку, печатающую' name' в 'std :: cout', составлен и запущен. «имя» было для меня «Джон Смит». –

+0

Почему вы используете c-style 'getline' вместо' istream :: getline'? – dmckee

ответ

2

Код, который вы покажете, должен работать над этим файлом. Так что что-то должно быть иначе, чем вы думаете. Наиболее вероятными виновниками являются:

  1. файл на самом деле имеет символ новой строки, где вы думаете, что только имеет место
  2. код использует inFile >> name, где вы думаете, он использует getline(inFile,name)

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

Кстати, из объявлений переменных вы можете смешать getline() звонки с вызовами оператора извлечения, например inFile >> income. Смешение их требует осторожности, потому что оператор экстракции оставляет за собой отстающие пробелы, которые затем может читать getline(). Внизу this есть дополнительная информация.

Смежные вопросы