#c #filestream #fstream #ofstream
#c #filestream #fstream #ofstream
Вопрос:
У меня есть endl, но он не попадает в мой файл, поэтому, когда я ввожу более 1 строки, все они находятся в одной строке в блокноте.
Я пытался:
CodeFile << Кодовая строка; CodeFile << endl;
Я также пытался добавить » n» к строке, добавив к ней постоянную строку, но это не работает.
//Writing Coded Lines to File:
if(codeFile)
{
//Relaying Feedback to User:
cout << "File has been successfully opened/created" << endl;
cout << "nWriting to file..." << endl;
for(int i = 0; i < lines; i )
{
//Getting Non-Coded Line from User:
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
cin.getline(line, length);
//Creating Copy of Line:
strcpy(cline, line);
//Gathering Line Length:
length = strlen(line);
//Coding Line:
codedLine = code(length, line, cline, sAlphabet);
//Coded Line Test
cout << codedLine;
//Writing to File:
codeFile << codedLine << endl;
}
}
//Closing File:
codeFile.close();
cout << "nFile has now been closed";
}
Комментарии:
1. Вы случайно не используете cygwn, не так ли?
2. Если вы говорите о Windows notepad.exe это разбивает строки только на » r n», но это визуальная вещь, связанная с приложением. Ваш символ новой строки все еще присутствует. Кроме того, не используйте std::endl, вместо этого используйте ‘n’.
3. Я использую cygwin. Но я попробую это.
4. Это сработало, спасибо! «/r / n»
Ответ №1:
Cygwin издевается над системой POSIX и использует окончания строк Unix, а не Windows, понятные для NotePad.
Замена endl
на 'n'
не поможет. endl
это 'n'
, за которым следует потоковая очистка.
Лучший вариант — использовать другое средство чтения файлов, например WordPad, которое понимает окончания строк Unix. Альтернативами являются
- Измените набор инструментов вашего компилятора на тот, который не эмулирует операционную систему POSIX, или
- Используйте грубую силу в строке Windows, заканчивающейся на
rn
, но это означает, что в вашем коде будет аналогичная проблема с неправильным завершением строки в системе на базе Unix.