gpt4 book ai didi

c++ - 从文件中读取数字列表到动态数组

转载 作者:行者123 更新时间:2023-11-28 06:17:17 27 4
gpt4 key购买 nike

我在将数字列表从 .txt 文件读取到 double 类型的动态数组时遇到问题。列表中的第一个数字是要添加到数组中的数字的数量。在第一个数字之后,列表中的数字都带有小数。

我的头文件:

#include <iostream>

#ifndef SORT
#define SORT

class Sort{
private:
double i;
double* darray; // da array
double j;
double size;

public:
Sort();
~Sort();

std::string getFileName(int, char**);
bool checkFileName(std::string);
void letsDoIt(std::string);
void getArray(std::string);

};

#endif

主要.cpp:

#include <stdio.h>

#include <stdlib.h>
#include "main.h"

int main(int argc, char** argv)
{
Sort sort;
std::string cheese = sort.getFileName(argc, argv); //cheese is the file name

bool ean = sort.checkFileName(cheese); //pass in file name fo' da check

sort.letsDoIt(cheese); //starts the whole thing up

return 0;
}

实现.cpp:

#include <iostream>
#include <fstream>
#include <cstring>
#include <stdlib.h>

#include "main.h"

Sort::Sort(){
darray[0];
i = 0;
j = 0;
size = 0;


}
Sort::~Sort(){
std::cout << "Destroyed" << std::endl;
}
std::string Sort::getFileName(int argc, char* argv[]){
std::string fileIn = "";
for(int i = 1; i < argc;)//argc the number of arguements
{
fileIn += argv[i];//argv the array of arguements
if(++i != argc)
fileIn += " ";
}
return fileIn;
}
bool Sort::checkFileName(std::string userFile){
if(userFile.empty()){
std::cout<<"No user input"<<std::endl;
return false;
}
else{

std::ifstream tryread(userFile.c_str());
if (tryread.is_open()){
tryread.close();
return true;
}
else{
return false;
}
}

}
void Sort::letsDoIt(std::string file){
getArray(file);

}
void Sort::getArray(std::string file){

double n = 0;
int count = 0;
// create a file-reading object
std::ifstream fin;
fin.open(file.c_str()); // open a file
fin >> n; //first line of the file is the number of numbers to collect to the array
size = n;
std::cout << "size: " << size << std::endl;

darray = (double*)malloc(n * sizeof(double)); //allocate storage for the array

// read each line of the file
while (!fin.eof())
{
fin >> n;
if (count == 0){ //if count is 0, don't add to array
count++;
std::cout << "count++" << std::endl;
}
else {
darray[count - 1] = n; //array = line from file
count++;
}


std::cout << std::endl;
}
free((void*) darray);
}

我必须使用 malloc,但我认为我可能使用不当。我已经阅读了其他帖子,但我仍然无法理解发生了什么。

感谢您的帮助!

最佳答案

您对 malloc() 的使用没有问题。您的阅读没有按照您的意愿进行。

假设我有输入文件:

3
1.2
2.3
3.7

我的数组是:

[0]: 2.3
[1]: 3.7
[2]: 0

这是因为您正在读取值 1.2,就像您正在重新读取值的数量一样。

当你有这条线时:

fin >> n;//文件的第一行是要收集到数组中的数字个数

您正在读取计数,在本例中为 3,并前进到文件中您将要读取的下一个位置。然后您尝试重新读取该值,但得到的是第一个条目。

我相信用下面的代码替换您的 while() {...} 将会满足您的需求。

while (count != size && fin >> n)
{
darray[count++] = n; //array = line from file
std::cout << n << std::endl;
}

这应该为您提供数组中的正确值:

[0]: 1.2
[1]: 2.3
[2]: 3.7

关于c++ - 从文件中读取数字列表到动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com