Что такое cin analougus отформатированного входа scanf?
С scanf есть, как правило, прямой способ отформатировать входной файл:
1) строка с вещественным числом выше 0 и меньше 1. Завершение на 'x', например: 0.32432523x
scanf("0.%[0-9]x", &number);
2) строка представляет собой добавление в формате: 30 + 28 = пятьдесят восемь
scanf(":%d+%d=%99s", &number1, &number2, &total);
Что такое cin-решение, используя только стандартную библиотеку?
Ответы
Ответ 1
Используйте оператор → для чтения из cin.
int number1, number2;
std::string text;
char plus, equals;
std::cin >> number1 >> plus >> number2 >> equals >> text;
if (!std::cin.fail() && plus == '+' && equals == '=' && !text.empty())
std::cout << "matched";
Это не так хорошо, как scanf, потому что вам нужно будет проверить любые литералы, которые были в строке scanf самостоятельно. Выполнение этого с потоками почти наверняка будет намного больше строк кода, чем scanf.
Я бы использовал scanf.
Ответ 2
Вы можете сделать простой класс для подтверждения ввода.
struct confirm_input {
char const *str;
confirm_input( char const *in ) : str( in ) {}
friend std::istream &operator >>
( std::istream &s, confirm_input const &o ) {
for ( char const *p = o.str; * p; ++ p ) {
if ( std::isspace( * p ) ) {
std::istream::sentry k( s ); // discard whitespace
} else if ( (c = s.get() ) != * p ) {
s.setstate( std::ios::failbit ); // stop extracting
}
}
return s;
}
};
использование:
std::cin >> x >> confirm_input( " = " ) >> y;