你必须通过指针fscanf()
:
fscanf(file,"%d, %d", &y[xy], &x[xy]);
而且,由于x
和y
是double
向量,则需要使用%lf
来读取值。你也应该从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昆明植物研究所长),那么fscanf()
将读取一行中的前两个数字,而下的fgets()
迭代将读取行渣,留fscanf()
找到下一行的数字。不寻常的,但一个可行的方案。
在评论中,你说每行的格式是x
选项卡y
;如果是这样的话,没有逗号分隔值,则需要从格式字符串中删除逗号:
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;
确定调用'fopen'成功了吗? – 2013-02-12 01:19:17
你有一行文字,那么两个坐标值? – 2013-02-12 01:25:31
没有,这就像 X(标签)Y – SamuelNLP 2013-02-12 01:27:33