Нужно считать целые числа, среди них есть записанные в экспоненциальном виде, есть ли способ их пометить как не правильные и пропустить, без обработки чисел как строки и переводом в число опять. Пробовал считывать в double и проверять остаток, но его может и не быть, зависит от числа, а в int записывает округлённый результат. Есть флаг fixed, но на cin он, конечно-же не работает.
3 Answers
Если заранее неизвестно, в каких фиксированных позициях располагаются "неправильные" числа, то пропустить их автоматически не получится. Читать придется именно строки и затем анализировать/переводить их в числа дополнительным вызовом какой-нибудь функции перевода.
Однако не совсем понятно, почему вы говорите о переводе "в число опять". Никакого "опять" тут не будет - читаем строку и переводим ее в число ровно один раз.
- 69,346
Допустим все числа записаны в одну строку, не знаю какой разделительный символ между ними, если пробел то просто считываем строку, если нет, то используем getline. Если строк много, то снова getline, только с другим разделительным символом
input - входной поток
string s;
int x;
while(!input.eof()){
intput>>s;//строка до разделителя
stringstream ss(s);
ss>>x;
if (!ss.eof()) {// не дошли при парсинге инта до конца строки
//значит x отметаем
report_error(s);
}
do_smth(x);
}
в итоге: если на входе было 123 2, в результате будет 123, 2; если было 123e2 2, на первой итерации s=123e2, x=123, ss.eof()=false
- 78
Нашел решение с использованием printf, он считывает только число, после этого можно проверить следующий символ, если это разделитель - число int, если нет - не целое число.
- 97
!eof- практически всегда ошибка в С и С++" – AnT stands with Russia Jul 03 '17 at 07:482. И сразу же в выводе магическим образром появится лишняя2. – AnT stands with Russia Jul 03 '17 at 08:15