1
#include <iostream>
#include <string>
using namespace std;

int main()
{
  // Declare a variable to store an integer
  int InputNumber;

  cout << "Enter an integer: ";

  // store integer given user input
  cin >> InputNumber;

  // The same with text i.e. string data
  cout << "Enter your name: ";
  string InputName;
  cin >> InputName;

  cout << InputName << " entered " << InputNumber << endl;

  return 0;
}

上記のプログラムは、 InputNumber に文字列を入力すると間違った出力を生成します。そこで何が起こっているのか、 Inputnumbe に割り当てられたメモリが上書きされていると思いますが、それが問題ですか? サンプル出力も提供されます。

correct output
Enter an integer: 123
Enter your name: asdf
asdf entered 123

wrong output
    Enter an integer: qwert
    Enter your name:  entered 0
4

2 に答える 2

8

整数の文字列を入力して整数変数に読み込もうとすると、入力ストリームがエラー状態になりました。エラー状態は、クリアされるまでスティッキーです。入力操作が成功したかどうか、good()メソッドをチェックするか、メソッドのビットをチェックすることで、エラー状態をテストできますrdstate()。メソッドでエラー状態を解除することができますclear()

于 2013-05-20T08:14:05.023 に答える
4

衝撃的なことに、「文字列を数値に入力する」ことは不可能であるため、C++ ライブラリの設計者は、入力を試みてから、それが成功したかどうかを判断する必要があるかもしれないという驚くべき結論に至りました。これは次のように行われます。

int x;
if (std::cin >> x)
    sing_and_dance();
else
    cry();

std::istream正しい使い方を知りたい場合はGoogle 。

于 2013-05-20T08:15:08.840 に答える