c ++:无法检测数组中数字的提升

时间:2012-12-08 07:39:01

标签: c++

我是c ++编程的新手,目前正在上课作为编程入门。我目前正在做一个家庭作业项目,我输入10个整数,并确定这些数字是否按升序排列。

我遇到的问题是程序总是认为有提升,无论提供什么输入。我认为问题在于IsInOrder()函数的for循环,但是我无法弄清楚为什么它无法正常工作或如何修复它。

另一个潜在的问题是如何确定所有值的提升,例如,如果我的代码有效,我认为它将[1,2,3,4,5,1,2,3,4,5]作为提升,即使它不是。

我尝试过在线搜索,并找到了一些类似的任务问题,但没有回答这些问题。

这是我到目前为止的代码:

#include <iostream>

using namespace std;

bool IsInOrder (int numHold[]);

//This portion takes the numeral inputs and outputs the answer
int main()

{
int numHold[10];

bool status;

cout << "Welcome to the Ascension detector 5000" << endl;
cout << "This program will detect whether the numbers you input are in ascending   
order" << endl;
cout << "Isn't that neat?" << endl <<endl;

for (int i=0; i < 10;i++)
{
    cout << "Please enter a number: ";
    cin >> numHold[i];
}
cout << endl;

for(int i=0;i < 10;i++)
{
    cout << numHold[i] << endl;
}

status = IsInOrder(numHold);

if (status == true)
{
    cout << "The numbers are in ascending order" << endl;
}
else
{
     cout << "The numbers are not in ascending order" << endl;
}



system("PAUSE");
return 0;
}

//This function determines whether the inputs are in ascending order

 bool IsInOrder (int numHold[])
{
for (int i = 0; i < 10; i++)
{
        if (numHold[i] < numHold [i++])
        {
            return false;
        }
        else
        {
            return true;
        }
}
}  

提前感谢任何帮助,如果代码格式不正确,请不要将代码复制/粘贴到代码示例中。

4 个答案:

答案 0 :(得分:2)

IsInOrder函数中,运行循环直到i<9并删除其他部分并将return true放在for循环之外。

为什么在for循环之外return true

因为只有在检查了所有元素时才返回true,而不是每次都检查。看看你会得到它的代码。

答案 1 :(得分:0)

您的IsInOrder例程不会检查数组中的所有值,它会在遇到两个不同的数字后立即返回。

此外,如果它将贯穿整个数组(即当所有数字都相同时),它将在结束时检查11个元素而不是10,并且它不会返回任何内容。

答案 2 :(得分:0)

bool IsInOrder(int numHold[])
{
    bool inOrder = true;
    for (int i = 0; i < 9; i++)
    {
        if (numHold[i] > numHold[i+1])
        {
            inOrder = false;
            break;
        }
    }
    return inOrder;
}

答案 3 :(得分:0)

首先,truefalse分支是错误的方式。

其次(假设true / false已经修复),您可以得出结论,只要您看到两个有序的数字,整个序列就会按升序排列。这是不对的:在你检查每一对之前,你不能return true

最后,循环的终端条件为1。

bool IsInOrder(int numHold[]) {
    for (int i = 0; i < 9; i++) {
        if (numHold[i] >= numHold[i+1]) {
            return false;
        }
    }
    return true;
}