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

Posted

技术标签:

【中文标题】将 5 个元素输入数组,检查验证然后输出 C++【英文标题】:Input 5 elements into array, check validation then output 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;
    

我的问题是:

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于将 5 个元素输入数组,检查验证然后输出 C++的主要内容,如果未能解决你的问题,请参考以下文章

YTU 2432: C++习题 对象数组输入与输出

精选力扣500题 第3题 LeetCode 215. 数组中的第K个最大元素 c++详细题解

编程实现:使用指针,通过键盘输入给一个具有10个元素的整型数组赋值,然后将这10个元素输出,并求和。

215. 数组中的第K个最大元素(c++)

排序和搜索----数组中的第K个最大元素

用java创建一个包含5个元素的List集合,然后将该List集合转换为数组,并输出转 换后的数组。