16

scanfを使用すると、通常、フォーマットされた入力を直接取得する方法があります。

1)実数が0より大きく1より小さい行。「x」で終わる例:0.32432523x

scanf("0.%[0-9]x", &number);

2)行は、30 + 28=58の形式で加算を表します

scanf(":%d+%d=%99s", &number1, &number2, &total);

標準ライブラリのみを使用したcinソリューションとは何ですか?

4

2 に答える 2

8

入力を検証するための簡単なクラスを作成できます。

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;
于 2013-01-15T05:09:50.363 に答える
6

>>演算子を使用して、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を使用します。

于 2013-01-15T04:34:37.437 に答える