在数组中输入5个元素,检查验证然后输出C ++

时间:2015-04-09 18:32:39

标签: c++ arrays duplicates try-catch

我正在开展一个项目,要求我将20-101中的5个数字输入到我的一维数组中。之后,它会显示这5个数字的输出。如果输入非数字/浮点数/重复/输出范围,请拒绝这些并请求用户再次输入。我必须尝试捕捉到我的代码中。此外,该程序能够在最后显示错误输入。到目前为止我得到的东西被困住了,我完全迷失了。

检查超出范围的数字

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.   
  3. 我不知道如何拒绝非数字输入和浮动数字。

  4.   

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

3 个答案:

答案 0 :(得分:0)

为调试改变你的功能:

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;
}

答案 1 :(得分:0)

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

int input;
cin >> input;

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

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

这也是不正确的

dup == true;  // equality

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

答案 2 :(得分:0)

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

#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循环。 <{1}}等于

for(int i = 0, i < 5; i++)

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