簡體   English   中英

什么是scanf格式輸入的cin analougus?

[英]What is the cin analougus of scanf formatted input?

通過scanf,通常可以直接獲取格式化輸入:

1)具有大於0且小於1的實數的行。在'x'上結束,例如: 0.32432523x

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

2)line代表格式的加法:30 + 28 =五十八

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

什么是cin解決方案,只使用標准庫?

您可以創建一個簡單的類來驗證輸入。

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;

使用>>運算符從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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM