c++ - 从文件中读取的冒泡排序生成随机数
问题描述
#include <iostream>
#include <fstream>
using namespace std;
int bubble(int arr[], int siz)
{
int i;
int sortat;
do
{
sortat = 1;
for (i = 0; i <= siz-1; i++)
{
if (arr[i] > arr[i+1])
{
int aux = arr[i];
arr[i] = arr[i+1];
arr[i+1] = aux;
sortat = 0;
}
}
}
while(sortat == 0);
for (i = 1; i <= siz; i++)
cout<<arr[i]<<" ";
return 0;
}
int main()
{
int a[1000];
int i;
ifstream fin;
fin.open("rand1k.txt");
if(fin.is_open())
{
for(i=0;i<1000;i++)
fin>>a[i];
}
bubble(a,1000);
}
我相信问题在于从文本文件中读取,因为在我添加之前排序工作得很好。注意:文本文件与项目不在同一文件夹中,而是在子文件夹中。
解决方案
如果该文件无法打开或在中间读取失败,您的排序功能会访问未定义的数据并且您会得到未定义的行为。所以你可以改进你的代码:
1 初始化你的数据 - int a[1000] = {}
;
2 如果文件未打开,则提供错误消息并退出
ifstream fin("rand1k.txt");
if( !fin ) {
std::cerr << "error: cannot open file" << std::endl;
return 100; // or whatever error code you prefer
}
3 检查每个输入是否成功:
for(i=0;i<1000;i++) {
fin>>a[i];
if( !fin ) {
std::cerr << "error on reading " << i << " element" << std::endl;
return 101; // or whatever error code you prefer
}
}
推荐阅读
- javascript - 将数字添加到 JS 数组中的重复 ID
- django - 添加一个新函数来计算基于类的视图中的评论
- linux-kernel - 每当上下文切换发生时,我应该在 linux 中看到什么中断?
- reactjs - onIncrement 涉及状态的数学题
- python - 在我的 If 语句中,变量不会重置为 0
- python - 在 Python 中改进饼图图形
- html - 导航栏颜色不是全宽
- bootstrap-4 - 带有非流体容器的 Bootstrap 侧边栏
- http - CORS:简单请求的目的是什么?
- html - 为什么 PowerShell 将包含 # 的 HTML 视为注释?