C ++ помогите с функцией getline с ifstream - PullRequest
1 голос
/ 17 марта 2010

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

Текстовый файл выглядит так:

  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 Ответ

2 голосов
/ 25 января 2012

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

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

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

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

есть больше информации.
...