我是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;
}
}
}
提前感谢任何帮助,如果代码格式不正确,请不要将代码复制/粘贴到代码示例中。
答案 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)
首先,true
和false
分支是错误的方式。
其次(假设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;
}