Итак, я пишу простую программу, просто пытаясь понять, почему она игнорирует пробелы (она рассматривает их как новые строки) и почему она не учитывает новые строки.ifstream игнорирует пробелы и новые строки - почему?
Язык: C++
Платформа: Kubuntu 13,04
Компилятор: г ++
Код:
unsigned int lines;
string line_content;
ifstream r_tftpd_hpa("/etc/default/tftpd-hpa"); // open file
// test for errors
if (r_tftpd_hpa.fail()) {
cerr << "Error opening file: \"/etc/default/tftpd-hpa\"" << endl;
exit(1);
}
// loop through file until end
while (!r_tftpd_hpa.eof()) {
r_tftpd_hpa >> line_content;
lines++;
// I also tried with \n
if (line_content[0] == ' ') { // my failed attempt at catching spaces
cout << endl << "Found empty line: " << lines << endl;
}
cout << "Line: " << lines << " content: " << line_content << endl;
}
Выход:
Line: 1 content: #
Line: 2 content: /etc/default/tftpd-hpa
Line: 3 content: TFTP_USERNAME="tftp"
Line: 4 content: TFTP_DIRECTORY="/var/lib/tftpboot"
Line: 5 content: TFTP_ADDRESS="0.0.0.0:69"
Line: 6 content: TFTP_OPTIONS="--secure"
Line: 7 content: TFTP_OPTIONS="--secure"
Сам файл:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
Этот файл состоит из 6 строк, однако, кажется, думают, что это 7. Считает пространство после #
в строке 1 в качестве новой строки и игнорирует пространство на второй строке в исходном файле. Также он печатает строку 6 and 7
, как если бы были две одинаковые строки, их нет.
Любая идея, что здесь происходит? Как мы имеем дело с пробелами и новыми символами?
Параметр 'noskipws' часть сделал это идти очень далеко, линия: 1159352 Содержание: Line: 1159353 Содержание: и так далее. Часть 'getline' частично работала, однако она все же пропустила первую строку, начинающуюся с ** # **. – dusz
@dusz Я пробовал код, и он работал нормально. См. Мой обновленный пост с полной программой. – Yang
Спасибо, линия, которая сделала трюк: 'assert()', нужно будет сделать еще некоторое чтение, установив в качестве ответа. – dusz