2013-11-23 3 views
-2

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

Из того, что я смог выяснить, моя строка будет напечатана только после того, как я поместил после нее «\ n». Проблема в том, что я пытаюсь записать его в файл, и он должен быть в соответствии с другой информацией.

Пример того, что я пытаюсь сделать мой файл выглядит следующим образом:

1111 Last, First 10  20  $30.00 

Что это на самом деле пишет:

1111    10  20  $30.00 

Это то, что я попробовал, и он будет печатать только последние 3 Предметы. Если я помещаю '\ п' после GetName() затем печатает все в порядке:

ofstream outputFile("somefile.txt"); 
    outputFile << std::setw(10) << getAccount() 
       << std::setw(10) << getName() // returns a string 
       << std::setw(10) << getNum1() 
       << std::setw(10) << getNum2() 
       << std::setw(10) << getTotal() << endl; 

Я пытался дозвониться вровень после GetName() но он не работает

outputFile.flush() 

Я должен хранить последнее и первое имя отдельно.

string getName() const 
    { 
     string full = last + ", " + first; 
     return full; 
    } 
+0

В чем проблема? Вы пытаетесь * распечатать * или записать файл? И что означает «это не сработало»? Что ты точно делал? Чего ты ожидал? И что случилось? Похоже, вы хотите 'outputFile << getAccount() << getName() << getNum1() << getNum2() << getTotal() << std :: endl;' возможно. –

+0

Вы должны сначала вывести файл File.open («somefile»)? – cen

+0

Я обновил свой вопрос, чтобы сделать его немного яснее. Проблема заключается в том, что он не отобразит строку для имени, если я не поместил «\ n» сразу после getName(). – mrT

ответ

1

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

std::ofstream outputFile("some-file.txt"); 

Предполагая, что это сортируется, посмотреть на std::setw(n) от <iomanip> и убедитесь, что ваши выходы каким-то образом разделены. Например, вы можете захотеть использовать

outputFile << std::setw(8) << getAccount() << ' ' 
      << std::setw(20) << getName() << ' ' 
      << std::setw(6) << getNum1() << ' ' 
      << std::setw(6) << getNum2() << ' ' 
      << getTotal() << '\n'; 

... и если вы действительно хотите, чтобы убедиться, что выход сразу же записываются в файл, а не буферный:

outputFile << std::flush; 

(что эквивалентно std::outputFile.flush();, но используя синтаксис cuter).

На основе замечаний, упомянутых выше, я бы догадаться вы закончили с именами, содержащими '\r' в самом конце: таким образом, это выглядит, как будто нет ничего, но на самом деле персонажи просто переписаны персонажами ближайших позже. Вы можете удалить символы возврата каретки с помощью

str.erase(std::remove(str.begin(), str.end(), '\r'), str.end()); 
+0

Я тоже пробовал это, без успеха. – mrT

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