首页 > 解决方案 > 从文件中读取的冒泡排序生成随机数

问题描述

#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);
}

我相信问题在于从文本文件中读取,因为在我添加之前排序工作得很好。注意:文本文件与项目不在同一文件夹中,而是在子文件夹中。

标签: c++

解决方案


如果该文件无法打开或在中间读取失败,您的排序功能会访问未定义的数据并且您会得到未定义的行为。所以你可以改进你的代码:

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
        }
    }

推荐阅读