所以我的程序应该使用一个5大小的数组来存储输入的整数。如果它是重复的整数,则不会存储到数组中。
这里的问题是我的数组会无限期地存在0,因为我将大小初始化为5.我只需要输出唯一数字我该怎么做?
我注意到的一件事是没有我的 unsigned int position; 每当我输入一个重复的整数时它会跳过索引;
例如数组[0] = 10,数组[1] = 10 //重复,数组[2] = 20 //输入20,这应该存储到数组[1]但事实并非如此。 所以我只有在不重复的情况下才能增加位置,以确保在输入重复时不会跳过索引。
有什么我可以做或做一个不同的方法来获得我的结果?
代码:
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
const unsigned int MIN_VALUE = 10;
const unsigned int MAX_VALUE = 100;
const size_t arraySize = 5;
array <int, arraySize> numberArray = {};
template<size_t size>
bool isDuplicate(array<int, size> array, int value)
{
for (unsigned int i = 0; i < array.size(); i++)
{
if (value == array[i])
{
return true;
}
}
return false;
}
int main()
{
unsigned int input;
unsigned int position = 0;
for (unsigned int i = 0; i < arraySize; i++)
{
cout << "Enter # " << (i + 1) << " : ";
cin >> input;
if (input < MIN_VALUE || input > MAX_VALUE)
{
cout << "The number entered is not in valid range of 10 to 100" << endl;
--i;
}
else if (!isDuplicate(numberArray, input))
{
numberArray[position] = input;
position++;
cout << "The number: " << input << " is unique\n" << endl;
}
}
}
谢谢!
答案 0 :(得分:0)
代码中唯一缺少的部分是else if
块下面的附加块:
else {
cout << "The number: " << input << " is not unique\n" << endl;
--i;
}
当值为重复时,您将减少您的位置,并向用户发出警告。
如果我必须在保留大部分代码的同时更新你的程序,我会写:
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
const unsigned int MIN_VALUE = 10;
const unsigned int MAX_VALUE = 100;
const size_t arraySize = 5;
// Initialize all array values to 0 (see std::array documentation)
array <int, arraySize> numberArray = {0};
template<size_t size>
bool isDuplicate(array<int, size> arr, int val)
{
bool ret = false;
// Do not waste time with invalid values
if (val < MIN_VALUE || val > MAX_VALUE)
return ret;
// Using size_t to express size
size_t pos = 0;
// Loop until reaching the end OR a not yet set array value
while ( pos < arr.size() && arr[pos]){
if (arr[pos] == val) {
// Found!
ret = true;
break;
}
++pos;
}
return ret;
}
int main()
{
unsigned int input = 0;
size_t position = 0;
while (position < numberArray.size()) {
cout << "Enter # " << (position + 1) << " : ";
cin >> input;
if (input < MIN_VALUE || input > MAX_VALUE) {
cout << "The number entered is not in valid range of 10 to 100" << endl;
} else if (!isDuplicate(numberArray, input)) {
numberArray[position] = input;
// Pre-increment operator is more efficient, see doc.
++position;
cout << "The number: " << input << " is unique\n" << endl;
} else {
cout << "The number: " << input << " is not unique\n" << endl;
}
}
}
它看起来像一个非常奇怪的规范的练习。应该更好地解释,以便为您提供更相关的现实生活解决方案。 ;) 希望这会有所帮助。