【问题标题】:Input 5 elements into array, check validation then output C++将 5 个元素输入数组,检查验证然后输出 C++
【发布时间】:2015-04-09 18:32:39
【问题描述】:

我正在做一个项目,该项目需要我将 20-101 的 5 个数字输入到我的一维数组中。之后,它会显示这 5 个数字的输出。如果输入非数字/浮点数/重复/超出范围,则拒绝这些并要求用户再次输入。我必须try and catch进入我的代码。此外,该程序能够在最后显示 bad 输入。到目前为止,我遇到了什么并被卡住了,我完全迷失了。

检查超出范围的数字

int ArrayReader::checkInput(int number)
{
    if (number >= 20 && number <= 101)
    {
        return number;
    }
    else
    {
        throw invalid_argument("Out-range-number entered");
    }

}

主代码

#include <iostream>
#include <stdexcept>
#include <iomanip>
#include "ArrayReader.h"
using namespace std;

int main()
{
    ArrayReader value;
    int number = 0;
    int dup;
    int Array[5];
    int currentArray = 0;
    cout << "Enter Number from 20 - 101: ";
    for (int i = 0; i < 5; i++)
    {
        cin >> number;
        dup = 0;
        if (number >= 20 && number <= 101)
        {
            for (int value = 0; value < currentArray; value++)
            {
                if (number == Array[value])
                {
                    dup == true;
                    dup = 1;
                    cout << "Number " << number << " already used. Try again";
                    break;
                }
            }
            if (dup == false)
            {
                Array[currentArray++] = number;
                i++;
            }
        }
        else
        {
            try
            {
                int result = value.checkInput(number);
                cout << "Valid Input: " << number << endl;
            }
            catch (invalid_argument &x)
            {
                cout << "Error: "
                    << x.what() << endl;
            }
        }
    }
    for (int i = 0; i < 5; i++)
    {
        cout << "Valid numbers entered" << " " << Array[i] << endl;
    }
}

我的问题是:

  1. 目前,当我运行程序时,它不允许我输入所有 5 个数字(仅 3 个)。它检查重复的数字和超出范围的数字。输出是一串奇怪的数字

  2. 我不知道如何拒绝非数字输入和浮点数。

我是C++初学者,请帮帮我!

【问题讨论】:

  • 问题 1,您在为其赋值之前检查number(除了零的初始化)。因此,您将立即跳入else 块,number 等于零。
  • 也许this Q&A 正在给你一些提示,如何去做。
  • 你们能在代码上给我解释一下吗?我是新人,我很难这么说。请!谢谢!
  • 问题在于代码存在多个问题。如果不为您写下全部内容,很难指出所有内容并解释为什么这里是错误的。

标签: c++ arrays duplicates try-catch


【解决方案1】:

改变你的调试功能:

int ArrayReader::checkInput(const int& number)
{
     cout << '\n checkInput number: ' << number << '\n';

    if (number >= 20 && number <= 101)
    {
        return number;
    }
    else
    {
        throw invalid_argument("Out-range-number entered");
    }
  return -1;
}

【讨论】:

    【解决方案2】:

    您可以使用cin.fail() 来检查有效整数

    int input;
    cin >> input;
    
    while(!cin.fail())
    {
        cin.clear();
        cin.ignore(256,'\n');
        cin.input();
    }
    

    这只是你任务的一部分。在初始 int number = 0 之后,您没有为 number 分配任何值。您有同名的变量 ArrayReader valuefor(int value = 0;...)

    这也是错误的

    dup == true;  // equality
    

    这些只是我通过查看代码可以看到的一些错误。使用调试器检查变量是否按预期赋值。

    【讨论】:

      【解决方案3】:

      我稍微更改了您的代码。首先我应该说必须改进以下代码。

      #include <iostream>
      using namespace std;
      
      int main()
      {
          int number = 0;
          bool isDuplicate = false;
          int Array[5];
          int arraySize = 0;
      
          cout << "Enter Number from 20 - 101: ";
      
          while(arraySize < 5)
          {
              try{
                  cin >> number;
      
                  isDuplicate = false;
      
                  if (number >= 20 && number <= 101)
                  {
                      for (int j = 0; j < arraySize; j++)
                      {
                          if (number == Array[j])
                          {
                              isDuplicate = true;
                              throw "Number is already used. Try again";                      
                          }
                      }
                      if (isDuplicate == false)
                      {
                          Array[arraySize] = number;
                          arraySize++;
                      }
                  }
                  else
                  {
                      throw "Error";
                  }
              }
              catch (char* err)
              {
                  cout << err << endl;
              }
          }
      
          for (int i = 0; i < 5; i++)
          {
              cout << "Valid numbers entered" << " " << Array[i] << endl;
          }
      
          char c;
          cin >> c;
      }
      
      • arraySize 保存数组中存在多少个数字(有效数字)的信息。
      • while 类似于 for 循环。 for(int i = 0, i &lt; 5; i++) 等于

      int i = 0; while( i < 5 ){ ... i++ }

      • 在 try 块中,您可以尝试您的代码。如果出现异常(错误),您可以将其抛出到 catch 块中。在此示例中,当存在重复数字或超出限制的数字时,它会向 catch 块发送错误消息。然后 catch 块写入错误消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 2021-05-12
        • 1970-01-01
        相关资源
        最近更新 更多