C ++ новичок: использование потока для записи данных в файл ... Почему мой код вводит возврат каретки? - PullRequest
1 голос
/ 13 июня 2011

Я написал код для выполнения расчетов.В коде есть цикл.Каждый цикл соответствует разному времени.

Для каждого цикла я хочу записать строку во внешний файл.Строка должна содержать «filename_» и номер цикла - например:

'fileName_4'

Проблема в том, что она выглядит как (с закрывающим 'в строке ниже):

'fileName_4
'

Если бы кто-нибудь мог помочь, я был бы очень благодарен.Вот что я попробовал:

std::string       convertedToString;
std::stringstream numberConverted; 

storeNumberForConversion << time << endl;   // time is a number, like the 4 in the example above
convertedToString = numberConverted.str() += "'";


fileNameHighestTimeStream.open ("fileName.txt", ios::out | ios::app );
fileNameHighestTimeStream << "'fileName_" << convertedToString << endl; 
fileNameHighestTimeStream.close();

Я также попробовал:

storeNumberForConversion << time << endl;   // time is a number, like the 4 in the example above
convertedToString = numberConverted.str();


fileNameHighestTimeStream.open ("fileName.txt", ios::out | ios::app );
fileNameHighestTimeStream << "'fileName_" << convertedToString << "'" << endl; 
fileNameHighestTimeStream.close();

Ответы [ 3 ]

3 голосов
/ 13 июня 2011

storeNumberForConversion << time << endl;

Вы должны удалить endl в конце.

storeNumberForConversion << time;

3 голосов
/ 13 июня 2011

Endl добавляет новую строку.Надеюсь, это поможет

1 голос
/ 13 июня 2011
std::string       convertedToString;
std::stringstream numberConverted; 

storeNumberForConversion << time << endl;   // time is a number, like the 4 in the example above
convertedToString = numberConverted.str() += "'";

Предположительно, это опечатка, и у вас есть:

std::string       convertedToString;
std::stringstream numberConverted; 

numberConverted << time << endl;   // time is a number, like the 4 in the example above
convertedToString = numberConverted.str() += "'";

Вы передали от endl до numberConverted, поэтому он содержит новую строку.Просто!

Из вашего комментария в другом месте:

Я думал, что endl очистит поток?Если я не включаю endl, стоит ли беспокоиться о сбросе потока?Если так, как бы я сделал это без endl?

<< endl - это то же самое, что и << '\n' << flush.Таким образом, вы все еще можете выполнить очистку самостоятельно с помощью << flush, но на самом деле обычно вам следует просто оставить это объекту потока для обработки в свое время.

Также использование += подозрительно (хотяв данном случае это дает правильный результат).

Исправлено:

std::stringstream numberConverted;
numberConverted << time;

std::string       convertedToString;
convertedToString = numberConverted.str() + "'";
...