gpt4 book ai didi

c++ - 读取包含小数的文件时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:33 27 4
gpt4 key购买 nike

我在尝试弄清楚为什么我的文件返回 0 而不是文件中的数字时遇到问题,这是我在 C++ 中读取文件时执行的代码:

    #include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

string cfile;
int cnum1,cnum2,cnum3,cnum4;
bool fired = false;



/*
*
*/

void printMatrix(double **x, int n)
{
int size = n;
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
std:: cout << x[i][j] << " " ;
}
std:: cout << std::endl;
}


}

void readFile(string file,double **x, int n)
{
std::ifstream myfile(file.c_str());

int size = n;
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
myfile >> x[i][j];
}
}
}

void GetCommandLineArguments(int argc, char **argv,string &file, int &n, int &k, int &m, int &i)
{
if( argc == 6 )
{
cfile = argv[1];
cnum1 = atoi(argv[2]);
cnum2 = atoi(argv[3]);
cnum3 = atoi(argv[4]);
cnum4 = atoi(argv[5]);
}
file = cfile;
n = cnum1;
k = cnum2;
m = cnum3;
i = cnum4;

}



int main(int argc, char** argv) {

int k; //Factor of n
int m; //Innner matrix size
int i; //Iteration
int n; //Matrix Size
string file;


GetCommandLineArguments(argc, argv, file, n, k, m, i);

double **matrix;

matrix = new double*[n];
for(int i = 0; i<n; i++)
matrix[i] = new double[n];

for(int j=0; j<n; j++)
for(int i=0; i<n;i++)
matrix[i][j] = 0;

readFile(file, matrix, n);
printMatrix(matrix, n);



return 0;
}

这是我的文件示例,其中包含我想从中提取的值:

20.0

20.0

20.0

20.0

20.0

200.0

20.0

200.0

希望有人能帮助我,因为我研究了一些关于这个的信息,但没有真正找到解决方案。

最佳答案

您的读取和打印代码似乎可以工作,但您的命令行读取代码可能存在一些问题。

我在没有获取命令行参数的情况下运行了您的代码。以下代码几乎是从您的 main minus getting command line args 复制粘贴而来的。

int main()
{
double **matrix;
std::string file = "test.dat";
int n = 5;

matrix = new double*[n];
for(int i = 0; i<n; i++)
matrix[i] = new double[n];

for(int j=0; j<n; j++)
for(int i=0; i<n;i++)
matrix[i][j] = 0;

readFile(file, matrix, n);
printMatrix(matrix, n);

return 0;
}

根据您提供的输入,我得到输出:

20 20 20 20 20
200 20 200 0 0
0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

但是 查看您的命令行 arg 阅读代码,我可以看到一些潜在的问题。首先你使用atoi()。当 atoi 失败时,它返回 0。你知道这段代码是有效的吗?一切都正确初始化了吗?还是 atoi 在输入时失败,导致 n 为 0 并因此导致无法读取任何内容? (您可能希望查看 stringstreams 以执行此类操作)。

此外,当 argc 不是 6 时,您会默默地失败并从未初始化的全局内存中读取。这段内存是垃圾。你知道这不会发生吗?如果你只是在做:

  your.exe test.dat 5

然后不会从命令行读取 5,因为 argc 不是 6。您是否总是像测试时那样传递 6 个参数?也许不是,因为在当前状态下,您的代码实际上只需要文件名和大小。

最重要的是,看看您是否从命令行获得了您期望的结果。

PS 这是 g++:

$ g++ --version g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

关于c++ - 读取包含小数的文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5851075/

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