Использование станд :: GetLine вместо оператора >> (станд :: IStream, Int)
std::istream infile(stuff);
std::string line;
while(std::getline(infile, line)) {
int result;
result = atoi(line.c_str());
if (result)
std::cout << result;
}
Причина вы испытываете поведение, которое вы, что когда станд :: IStream пытается (и не удается) читать в целое число, он устанавливает флаг «badbit», что означает, что что-то пошло не так. Пока этот флаг флэш-памяти остается установленным, он ничего не сделает. Таким образом, на самом деле это не перечитывание в этой строке, оно ничего не делает и оставляет ценность, которая была там одна. Если вы хотите больше соответствовать тому, что у вас уже было, это, вероятно, как показано ниже. Вышеприведенный код проще и менее подвержен ошибкам.
std::istream infile(stuff);
int result;
infile >> result; //read first line
while (infile.eof() == false) { //until end of file
if (infile.good()) { //make sure we actually read something
std::cout << result;
} else
infile.clear(); //if not, reset the flag, which should hopefully
// skip the problem. NOTE: if the number is REALLY
// big, you may read in the second half of the
// number as the next line!
infile >> result; //read next line
}
ли возможность использовать более длинные целые числа? –