C++从txt中提取数据时无法使气泡排序起作用

C++ can't get bubble sort to work when extracting data from txt

本文关键字:气泡 排序 起作用 txt 提取 数据 C++      更新时间:2023-10-16

我对编程相当陌生,并且正在努力从文本文件读取值时使气泡排序工作。下面是我的代码:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream myFile;
myFile.open("D:/University/Physics/3 - Third Year/C++/2/simpledata.txt");
char myArray[100];
if( myFile.is_open() ){
    while( !myFile.eof() ){
        myFile >> myArray;
        cout << myArray << endl;
    }
}
bool swap=false;
do{
swap=false;
for(int i=0; i<36; i++){
            if(myArray[i] > myArray[i+1])
            {
                float temp = myArray[i+1];
                myArray[i+1] = myArray[i];
                myArray[i] = temp;
                swap=true;
            }
        }
}while(swap==true);

for(int i=0; i<37; i++)
{
    std::cout << myArray[i] << ",";
}
std::cout << std::endl;
return 0;
myFile.close();
return 0;
}

下面是我的txt文件中的数据:

1 4 5 6 8 7 6.3 5.2 18 17.1 -3.2 -4 -5 -4 12 7 9 20 21.1 22 22.3 14 15 12 12.1 11 16 7 4 -1 8 17.2 16 13.1 15

现在,当我在程序中创建一个数组时,冒泡排序工作得很好,但是当我从txt文件读取数据到'myArray'后尝试同样的排序时,我得到了很多奇怪的符号,像这样:

我尝试的一件事是将'char myArray[100]'更改为'float myArray[100]',但这给了它自己的问题。

任何帮助都是感激的,如果我说得太含糊,我道歉。

您可以将其更改为float myArray[100],但是您的文件读取代码应该是这样的:

if( myFile.is_open() ){
    float* tempArr = myArray;
    while( myFile >> *tempArr ){
        cout << *tempArr << endl;
        ++tempArr;
    }
}

完整的代码示例在这里

http://codepad.org/LTQ402pE

你在排序中有错误,为什么你不直接声明双精度数组而不是字符?

#include <iostream>
#include <fstream>
using namespace std;
int main(){
    ifstream myFile;
    myFile.open("D:/University/Physics/3 - Third Year/C++/2/simpledata.txt");
    double myArray[37];
    int i = 0;
    if( myFile.is_open() )
    {
        while( myFile >> myArray[i] )
        {
            cout << myArray[i] << endl;
            i++;
        }
    }
    cout << endl << endl;
    for( i = 0; i < 37; i++)
    {
        for(int j = (i + 1); j < 37; j++)
        {
            if(myArray[i] > myArray[j])
            {
                double temp = myArray[i];
                myArray[i] = myArray[j];
                myArray[j] = temp;
            }
        }
    }
    for( i = 0; i < 37; i++)
    {
        std::cout << myArray[i] << ",";
    }
    std::cout << std::endl;
    return 0;
    myFile.close();
    return 0;
}