io — C ++ игнорирует алфавитные символы при чтении ввода из файла

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

это мой код и он не работает

    int line;
in >> line;
in.ignore(1, 'abc');
in.clear();

кто-то может указать, в чем проблема? по сути, я хочу отбросить альфа-ввод, очистить cin и продолжить чтение из файла, но я получаю бесконечный цикл.

0

Решение

Этот код должен работать

Я получаю три части из входного потока и помещаю полезные части в stringstream и читать из него

int part1, part2;
std::string abc;
in >> part1 >> abc >> part2;
std::stringstream ss;
ss << part1 << part2;
int line;
ss >> line
0

Другие решения

Вы можете явно игнорировать любой алфавитный символ следующим образом:

#include <locale>
#include <iostream>

std::istream& read_number(std::istream& is, int& number) {
auto& ctype = std::use_facet<std::ctype<char>>(is.getloc());
while(ctype.is(std::ctype_base::alpha, is.peek())) is.ignore(1);
return is >> number;
}

int main() {
using std::string;
using std::cin;
using std::locale;

int number;
while(read_number(std::cin, number)) {
std::cout << number << ' ';
}
}

Для ввода типа «452abc def 23 11 -233b» будет получено «452 23 11 -233».

0

По вопросам рекламы ammmcru@yandex.ru