将输入限制为仅限数字

时间:2014-07-16 16:00:53

标签: c++ numeric limits

这是我输入值的一部分,我想要做的只是输入0-9但是当我输入一个字母或任何无效的键时,他们的程序工作正常,要求重新输入。

无效输入请重新输入:

然而这次我重新进入它 打印出来:[6.95324e-310 2 3 4 5]

这是代码:

int main()
{
   int aSize=5;
   double aArray[aSize];
   double value;

   for(int i=0;i<aSize;i++)
   {
      cout<<"enter value of slot"<<i+1<<": ";
      cin>>value;
      if(cin.fail())
      {
         cin.clear();
         cin.ignore(numeric_limits<streamsize>::max(), '\n');
         cout<<"invalid input please re-enter: ";
         cin>>value;
      }
      else
      {
         aArray[i] = value;
         cout<<"value of aArray: "<<aArray[i];
      }

2 个答案:

答案 0 :(得分:1)

试试这个:

    for (int i = 0; i < aSize; i++)
    {
        cout << "enter value of slot" << i + 1 << ": ";
        cin >> value;
        while (cin.fail())
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "invalid input please re-enter: ";
            cin >> value;
        }
        aArray[i] = value;
        cout << "value of aArray: " << aArray[i];
    }

答案 1 :(得分:0)

修复代码流,并非所有路径都受支持。

int main() {
  int aSize=5;
  double aArray[aSize];
  double value;

  for(int i=0;i<aSize;i++) {
    cout<<"enter value of slot"<<i+1<<": ";
    cin>>value;
// repeat handling of failure
    while (cin.fail()) {
      cin.clear();
      cin.ignore(numeric_limits<streamsize>::max(), '\n');
      cout<<"invalid input please re-enter: "; 
// at this point we want to get back to fail
      cin>>value;
    }
    aArray[i] = value;
    cout<<"value of aArray: "<<aArray[i];

}