第二小整数的输出不正确
Incorrect output for the second smallest integer
我在数组中找第二小的整数时遇到问题。数组未排序(这是data.txt文件中的内容),所以我知道这可能是问题的一部分,我不知道如何以最简单的方式解决这个问题。之后,我必须从数组中删除那个整数,将每个数字移到上面,然后重新打印数组,如果有人能帮忙,我真的很感激
const NUM = 10;
int Array[NUM];
ifstream infile;
infile.open("Data.txt");
for (int i = 0; i < NUM; i++)
{
infile >> Array[i];
cout << Array[i] << endl;
}
int Min = Array[0];
int Next = 0, SecondMin = 0;
for (int k = 0; k < NUM; k++)
{
if (Min > Array[k])
Min = Array[k];
}
for (int m = 2; m < NUM; m++)
{
Next = Array[m];
if (Next > Min)
{
SecondMin = Min;
Min = Next;
}
else if (Next < SecondMin)
{
SecondMin = Next;
}
}
cout << "The second smallest integer is: " << SecondMin << endl;
您不必在数组上循环两次就可以找到第二小的数字。只要你同时跟踪最小的和第二小的,你就应该能够用一个循环找到它们。
这个代码还有几个其他问题:
您对文件结尾的检查可能应该是if (!infile.eof())
您不需要在循环中检查if (i < NUM)
。由于循环上的约束,i
将总是小于NUM
。
如果由于某种原因,文件中的项数小于NUM
,则数组中的其余项将具有未定义的值。例如,如果文件中只有九个项目,那么在读取文件后,Array[9]
将具有创建数组时内存中该位置的任何值。这可能会导致您的算法出现问题。
我认为这是某种家庭作业问题,这就是为什么需要使用数组的原因。但请记住,在这种情况下,您可能希望使用std::矢量。这样,你就可以继续从文件中读取数字,并将它们添加到向量中,直到到达末尾,而不是有固定数量的输入,并且向量中的所有值都是有效的。
相关文章:
- Windows 10命令提示符的输出不正确
- C++ - 为什么 unicode 输出不正确?
- 我的叉子输出不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 当行数和列不匹配时,输出不正确
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 上一个较大的数字代码中的输出不正确
- 二进制搜索树的输出不正确
- 拆解输出不正确(BeaEngine)
- 最大输出不正确
- 基本合并排序中的输出不正确
- 更改声明顺序时输出不正确
- Base64 转换器的输出不正确
- 使用 find_first_of() 和 substr() 分隔字符串,但我得到的输出不正确
- 对字符串进行索引时输出不正确
- .wav C++数据输出不正确