gpt4 book ai didi

c++ - 无法从 C++ 中的文本文件中读取

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

这是我的代码。我在 QT 的函数中使用它,但程序退出了,我不知道为什么。

int xy;
xy = 0;

QVector<double> x(1000), y(1000);
FILE *file;

char line[1024];
file = fopen("ecg.txt", "r");

while (fgets(line,1024,file) != NULL)
{
fscanf(file,"%d, %d", &y[xy], &x[xy]);
xy++;
}

QwtPlotCurve *curve = new QwtPlotCurve;
curve->attach(plot_all[0]);
curve->setData(x,y);

我在 while 行中遇到段错误

我的文件每行只有两个 double ;它们是成对的坐标。

我检查了我的 x 和 y,结果是 [0; 0; 0; 0; ...0; 0; 0]

最佳答案

您必须将指针传递给 fscanf():

fscanf(file,"%d, %d", &y[xy], &x[xy]);

此外,由于xydouble 的 vector ,因此您需要使用%lf 来读取值(value)。您还应该检查 fscanf() 的返回值,以确保成功读取了两个值:

if (fscanf(file, "%lf, %lf", &x[xy], &y[xy]) != 2)
...handle error...

您需要打开编译警告并修复编译器警告的内容——或者获得一个更好的编译器来为您提供此类警告(如果您使用 G++,g++ -Wall 是一个好的开始)。

还要注意,这个奇怪的代码将一行读入 line,然后直接从文件中读取一些数字。你是不是想写:

if (sscanf(line, "%lf, %lf", &x[xy], &y[xy]) != 2)
...handle error...

你得到的是 fgets() 读取第一行(假设不超过 1 KiB),然后 fscanf() 将读取前两行一行中的数字,fgets() 的下一次迭代将读取该行的剩余部分,让 fscanf() 查找下一行中的数字。不寻常但可行的方案。

在评论中,你说每一行的格式是xtaby;如果是这种情况并且没有逗号分隔值,那么您需要从格式字符串中删除逗号:

if (sscanf(line, "%lf %lf", &x[xy], &y[xy]) != 2)
...handle error...

但是,如果您的崩溃确实发生在 while 行中,那么您的问题几乎可以肯定是文件未能打开。始终检查 fopen()(或任何其他文件打开函数)的返回值。您可能会因为很多很多原因而无法打开文件,并且错误地假设文件打开时它不会带来幸福。

此外,在 C++ 中,在定义变量时初始化变量是个好主意:

FILE *file = fopen("ecg.txt", "r");

if (file == 0)
...handle error...

QVector<double> x(1000), y(1000);
char line[1024];
int xy = 0;

关于c++ - 无法从 C++ 中的文本文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823932/

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