我有一项任务,要求程序从用户输入到数组中读取20个数字。 条件要求值在10-100之间且不重复。我也只允许使用一个包含20个元素的数组。但是,它不应该提示用户而只是不存储值;最后,程序必须打印出唯一的用户值。 正确的结果例如:
input = 9 10 15 15 15 0
output = 10 15
//this is a small example with a 6 element array instead of 20
当我测试我的程序时,我只能
input: 9 10 15 15 15 0
output: 10 15 15 15
//this is a small example with a 6 element array instead of 20
我使用基于范围的循环编写代码来检查值,如果不满足条件,则将值设置为0。所以任何不为零的东西都不会打印出来。我已经完成了有关堆栈溢出的所有问题,但我无法找到特定问题的答案:
我创建的循环似乎有些不对劲,但它看起来很完美。我和同学们一起检查了,他们也同意了。
//arrayinput.h
#include <array>
#include <string>
class arrayelimination
{
public:
const static size_t limit = 20;
arrayelimination();
void inputArray();
void displayArray();
private:
std::array < int , limit > store;
int userinput;
};
//arrayinput.cpp
#include <iostream>
#include <array>
#include "arrayinput.h"
using namespace std;
arrayelimination::arrayelimination()
{
array < int , limit> store = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
}
void arrayelimination::inputArray()
{
for ( size_t i = 0; i < store.size(); i++)
{
cout << "Enter number between 10-100 for array box ["
<< i << "]: " ;
cin >> userinput;
//check if numbers is between 10-100
if (userinput >= 10 && userinput <= 100)
{
//MOST LIKELY ERROR check if number has previously been used.
for ( int &check : store)
{
if ( check != userinput)
{
store[i] = userinput;
break;
}
else
store[i] = 0;
}
}
//output if number isn't between 10-100
else
store[i] = 0;
}
}
void arrayelimination::displayArray()
{
cout << "Your unique array numbers stored include...\n";
//output all the unique numbers that the user inputted.
for ( size_t j = 0; j < 20; j++)
{
//if the value is NOT 0, output.
if (store[j] != 0)
{
cout << "array[ " << j << " ] = " << store[j] << "\n";
}
}
}
当我测试我的程序时,我只能
input: 10 15 15 15 2 0 0 0 0 0 0 0 ... 0
output: 10 15 15 15
将其设置为零的概念有效但重复值不是唯一的。
我必须使用面向对象的设计作为此任务的要求。我快要死了,我真的不知道这是怎么回事。请帮帮我。
PS:我的不好我忘了提到我只允许使用一个阵列
答案 0 :(得分:2)
问题不在于range-based for loop
本身的结构,而是问题在于您检查输入值是否唯一的条件。
在此代码块中:
for ( int &check : store)
{
if ( check != userinput)
{
store[i] = userinput;
break;
}
else
store[i] = 0;
}
您正在设置userinput
遇到任何不匹配的元素的值。因此,即使userinput
与数组中稍后的值匹配,第一个不匹配的元素也会导致您设置userinput
。您需要确定的是userinput
匹配数组中的NO元素。
例如:
for ( int &check : store)
{
if(check == userinput)
{
store[i] = 0;
break;
} // a match is found so set the value to 0 and stop
else
{
store[i] = check;
}
}
答案 1 :(得分:1)
标准算法有什么问题吗?
int values[20];
// 1) read them in
for (int& v : values) {
std::cin >> v;
}
// 2) sort/uniq
std::sort(std::begin(values), std::end(values));
auto last = std::unique(std::begin(values), std::end(values));
// 3) print them
std::for_each(values, last, [](const int v){
std::cout << v << " ";
});
答案 2 :(得分:0)
你让这个过于复杂。
您也可以使用基于范围的循环执行相同的操作。