将 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 value
和 for(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 < 5; i++)
等于
int i = 0;
while( i < 5 )
...
i++
【讨论】:
以上是关于将 5 个元素输入数组,检查验证然后输出 C++的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第3题 LeetCode 215. 数组中的第K个最大元素 c++详细题解