2013-03-22 2 views
0

Я пытаюсь прочитать строку из файла с пробелами в нем. Несмотря на все, что я пытался и все мои исследования, ничего не похоже на работу, вот мой текущий attempПроблема с чтением из файла

void read_name(fstream& in_file, comp& cmp) 
{ 
    char buff[80]; 
    in_file.getline(buff, 79, '\n'); 
    in_file >> buff; 

    cout << "NAME: " << buff << endl; 

    cmp.set_name(buff); 
    in_file.getline(buff, 79); 
} 

По какой-то причине, это все равно будет прочитать, пока он не видит пространство, а затем останавливается. Любая помощь приветствуется. Я не так хорош с прямым C++, поэтому я мог бы просто что-то упустить.

ответ

0

Поскольку вы используете C++, я рекомендую использовать stl-строку вместо массивов char.

std::string linestr; 
while(std::getline(input, linestr)) 
{ 
    // process line 
} 

где вход является вашим потоком ifstream.

+1

И поскольку мы используем стандартный C++, я рекомендую вам вызывать стандартную библиотеку C++ «стандартную библиотеку C++», а не «STL», которой она не является. – 2013-03-22 18:57:02

+0

std * not stl ... отредактированный пост. Просмотрите его. – CLearner

1
in_file.getline(buff, 79, '\n'); 

Там. Вы читаете строку (предполагая, что длина строки не превышает 78 символов). Так почему ты пошел и сделал это?

in_file >> buff; 

Это будет перезапись строки, которую вы только что прочитали, следующим словом. Если вы хотите следующую строку, то снова вызовите getline.

Но лучше использовать std::string и бесплатную функцию std::getline, поэтому вам не нужно указывать длины линий.

std::string buff; 
std::getline(in_file, buff); 
+0

Я пробовал это, но ничего не распечатывал после «NAME:» void read_name (fstream & in_file, comp & cmp) { std :: string line; if (std :: getline (in_file, line)) { cout << "ИМЯ:" << строка << endl; } cmp.set_name (buff); in_file.getline (buff, 79); } – roundtheworld

+0

@ user1595510: Тогда что-то происходит неправильно, возможно, содержимое файла не то, что вы ожидаете, я не знаю. Я не могу диагностировать его без дополнительной информации. http://sscce.org/ –

1

Линия

in_file >> buff; 

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

+0

1) Это должен быть комментарий, а не ответ. 2) Файл, открытый в текстовом режиме (по умолчанию), заботится о различиях в окончаниях строк. –

+0

@BenjaminLindley, справедливые точки. Соответственно исправит. – Rich

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