Это не для меня ясно, что вы пытаетесь сделать.Если содержимое файла составляет "kyu"
, тогда вход определенно остановится, когда он достигнет конца файла. То, что я подозреваю (но я действительно просто догадываюсь) заключается в том, что вы выводите строки без разделителя, и поэтому вход не знает, где заканчивается каждая строка , и читает все символы как одну строку , В другими словами, ваш выходной файл содержит "junhuakyu..."
.
При выводе строк (и многих других вещей) в качестве текста вы должны найти какой-либо способ их разграничения . Если строки используют ограниченный набор символов (например, просто буквы), часто достаточно, чтобы просто вставить символ разделителя между каждой строкой , выбирая строку, которая не может отображаться в строках. Для Например:
for (auto p = std::begin(name); p != std::end(name); ++ p) {
if (p != std::begin(name)) {
std::cout << ' ';
}
std::cout << *p;
}
Это даст вам что-то вроде "jun hua kyu ..."
в файле , который можно легко прочитать с помощью:
std::string st;
while (std::cin >> st) {
// ...
}
Который воспитывает secont проблемы с вашим кодом. Вы используете результаты того, что вы прочитали, без проверки, удалось ли прочитать . Если он не работает (например, из-за конца файла), то st
не может быть изменен; во всяком случае, если файл является файлом , и на самом деле содержит только текст, вы никогда не получите st == "\0"
; это может произойти только в том случае, если файл фактически содержит символ a '\0'
(что не является законным, если это текстовый файл).
Наконец, конечно: выбор разделителя зависит от вас. Белое пространство особенно прост; если строки могут содержать пробелы, вы можете выбрать '\n'
и использовать std::getline
для чтения. И если хуже ухудшается, а строки могут быть буквально любыми, вам придется реализовать какой-то механизм кавычек, возможно с escape-символами.
Использовать ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) –
' строка, которую я вводил, не останавливается' Что значит? –
Кроме того, я бы ожидал, что ваш пример кода будет выводиться 'kyu', а не' hua' –