在c ++中读取文本文件的所有值

问题描述 投票:0回答:2

我必须对数组使用冒泡排序算法。我必须使用函数定义:

string Sort(double array[8]);

我的程序需要从一个名为“ values.txt”的文本文件中读取。在每一行上,将以逗号分隔的双精度值列表。每个列表的长度为8个元素。我需要使用BUBBLE SORT算法对这些列表进行排序。每行应排序,然后以升序显示。文本文件中的每一行都将换行。

例如,给定一个列表:6.4,3.25,7.5,2.5,1.1,11.6,0.5

排序结果应为:0.5,1.1,2.5,3.25,6.4,7.5,11.6

我的代码运行良好,除了它只读取文本文件的第一行。我需要它来读取文本文件中的每一行并对其进行排序然后显示。我知道我需要一个while循环,但是当我包含它时,我会得到关于空间和核心转储的错误?我的代码如下。预先感谢。

#include <iostream>
#include <sstream>
#include <string>
#include <fstream>

using namespace std;

string Sort(double array[8]);

void swap(int &, int &);

int main()
{

    double array[8];

    string sline, snum,svalues;

    ifstream inputfile;

    inputfile.open("values.txt");

    if (!inputfile.is_open())
    {
        cout<<"error with file"<<endl;
    }

    getline(inputfile,sline);
    svalues = sline;
    stringstream ss(svalues);
    int i =0;
    while (getline(ss, snum, ','))
    {
        array[i] = stod(snum);
        i++;
    }
    inputfile.close();
    Sort(array);
    for (int c= 0; c<8; c++)
    {
        if (c==7)
        {
            cout<<array[c]<<"";
        }
        else
            cout<<array[c]<<",";
    }
    return 0;
}

string Sort(double array[8])
{
    int maxelem;
    int index;
    for(maxelem = 8-1; maxelem>0; maxelem--)
    {
        for (index=0; index<maxelem; index++)
        {
            if (array[index] > array[index+1])
                swap(array[index], array[index+1]);
        }
    }
}

void swap(int &a, int &b)
{
    int temp = a;
    a=b;
    b=temp;
}
c++ arrays loops sorting double
2个回答
0
投票

索引存在问题,该文件有7个数字,但是您正在对其进行排序,就好像它们是8个数字一样,因此未初始化已排序数组中的第一个索引。您可以在文件中再加上一个数字,也可以将函数的索引减少到7,还可以减少数组的大小。

排序函数的返回类型为string,但不返回任何内容,请使其无效。

这两者都会导致不确定的行为。

这段代码:

if (!inputfile.is_open())
{
    cout << "error with file" << endl;
}

如果发生错误,打印不足,您必须停止执行I / O部分:

if (!inputfile.is_open())
{
    cout << "error with file" << endl;
}
else
{
    getline(inputfile,sline);
    //...
}
return 0;

0
投票

读取1行后,您正在关闭文件。完成后关闭文件。完整代码:

    while(getline(inputfile, sline)) {
        svalues = sline;
        std::cout << "Current line: " << sline << '\n';
        stringstream ss(svalues);
        int i =0;
        while (getline(ss, snum, ','))
        {
            array[i] = stod(snum);
            i++;
        }
        // using std::sort
        // std::sort(array, array + 8);
        Sort(array);
        for (int c= 0; c<8; c++)
        {
            if (c==7)
            {
                cout<<array[c]<<"";
            }
            else
                cout<<array[c]<<",";
        }
        std::cout << std::endl;
    }
    //close the file
    inputfile.close();
    return 0;

P.S:您没有从Sort()函数返回任何内容,因此请将其返回类型更改为void。如果have返回string,请确保从函数中返回一些内容:

string Sort(double array[])
{
    // sorting logic...
    std::stringstream ret;
    for (int i = 0; i < 8; ++i)
    {
        ret << array[i] << ', ';
    }
    return ret.str();
}

并且在主功能中,只需执行以下操作,而不是手动打印出值:

cout << Sort(array) << '\n';
© www.soinside.com 2019 - 2024. All rights reserved.