目前在大学学习软件工程(第一年),并制作了一个程序,其中用户输入将有多少条目,然后他们输入每个条目的时间,并按降序排序。
我遇到的问题是,当我为第一个输入输入一个很大的数字时,它不能正确排序,但其余的可以。如果有人能帮我解决这个问题就太好了,很抱歉这个菜鸟问题:
完整的代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int TotalSize = 0;
void getSpeed(int *CalculationTime, int NoOfCalculations)
{
for (int i = 0; i < NoOfCalculations; i++)
{
cout << "Please enter the speed of calculation " << i + 1 << "(Ms): "; cin >> CalculationTime[i];
}
}
void sort_speeds(int *CalculationTime, int NoOfCalculations)
{
// Sorting speeds in decending order
bool swapped = true;
int i, j = 0;
int temp;
while (swapped)
{
swapped = false;
j++;
for (i = 1; i < NoOfCalculations - j; i++)
{
if (CalculationTime[i] > CalculationTime[i + 1])
{
temp = CalculationTime[i];
CalculationTime[i] = CalculationTime[i + 1];
CalculationTime[i + 1] = temp;
swapped = true;
}
}
}
// Output times decending order
for (int i = 0; i < NoOfCalculations; i++)
{
cout << CalculationTime[i] << "\n";
}
}
int main()
{
// Declaring & Initializing variables
int NoOfCalculations = 0;
int *CalculationTime = new int[NoOfCalculations];
// Getting user input
cout << "How many calculations are there? "; cin >> NoOfCalculations;
getSpeed(CalculationTime, NoOfCalculations);
// Sorting and displaying times
sort_speeds(CalculationTime, NoOfCalculations);
system("pause");
return 0;
}发布于 2014-11-20 20:02:27
您从未将数组的第一个元素与任何元素进行比较- for (i = 1; i < NoOfCalculations - j; i++)应为for (i = 0; i < NoOfCalculations - j; i++)
发布于 2014-11-25 08:12:50
问题是for (i = 1; i < NoOfCalculations - j; i++)你从位置1开始,从位置0开始,它解决了这个问题。for (i = 0; i < NoOfCalculations - j; i++)
发布于 2014-11-20 20:01:11
// Declaring & Initializing variables
int NoOfCalculations = 0;
int *CalculationTime = new int[NoOfCalculations];
// Getting user input
cout << "How many calculations are there? "; cin >> NoOfCalculations;巴兹特。您分配了一个零元素数组,然后又没有重新分配它。我敢打赌,如果你输入了一个足够大的计算次数,你的程序就会崩溃。
实际上,您希望使用std::vector,这是一种非常有用的数据结构,它的使用有点超出了本答案的范围。基本上,你可以这样做:
std::vector<int> getSpeeds(int NoOfCalculations)
{
std::vector<int> speeds;
for (int i = 0; i < NoOfCalculations; i++)
{
int speed;
std::cout << "Please enter the speed of calculation " << i + 1 << "(Ms): ";
std::cin >> speed;
speeds.push_back(speed);
}
return speeds;
}您几乎可以像使用数组一样使用返回的向量:
std::vector<int> speeds = getSpeeds(10);;
if (CalculationTime[3] > CalculationTime[4])
// do something通常,在C++应用程序中,显式使用指针表明您没有使用标准库,其结果是使您自己的工作变得非常非常困难。
哦,还有:
for (i = 1; i < NoOfCalculations - j; i++)您永远不会查看NoOfCalculations[0]或NoOfCalculations[i - 1],因此您永远不会接触第一个元素。
https://stackoverflow.com/questions/27039015
复制相似问题