gpt4 book ai didi

c - 我尝试打开 .dat 文件时出错

转载 作者:行者123 更新时间:2023-11-30 14:54:33 25 4
gpt4 key购买 nike

当我尝试用 C 代码打开 .dat 文件时遇到问题。也许我犯的错误对你们中的一些人来说非常明显,但我找不到它,所以我请求你们的帮助。我的代码的要点是打开包含 12.000.000 个双数的 .dat 文件并将其存储在 cuDoubleComplex 数组中,其大小为 6.000.000 个变量(.dat 的偶数变量代表实部,奇数变量代表虚数(我的意思是顺序,而不是变量的值))

这是我的代码的摘录:

#include "cuComplex.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int main(void)
{
int n = 12000000; //12.000.000
int lse = n / 2;
double *data = (double *)malloc(12000000 * sizeof(double));
double *data2 = (double *)malloc(12000000 * sizeof(double));
FILE *f, *f2;
cuDoubleComplex *se, *se2;

f = fopen("ref_PRI20.dat", "r");
fread(data, sizeof(double), n, f);
fclose(f);

f2 = fopen("surv_PRI20.dat", "r");
fread(data2, sizeof(double), n, f2);
fclose(f2);


for (int a = 0; a < n; a++)
{
printf("%f\n", data2[a]);
}


se = (cuDoubleComplex*)malloc(lse * sizeof(cuDoubleComplex));
se2 = (cuDoubleComplex*)malloc(lse * sizeof(cuDoubleComplex));
for (int a = 0; a<n / 2; a++)
{
se[a].x = data[2 * a];
se[a].y = data[2 * a + 1];
se2[a].x = data2[2 * a];
se2[a].y = data2[2 * a + 1];
}
free(data);
free(data2);

}

我添加了 printf 行和 bucle 只是为了检查,我得到的只是“0,0000”作为值。尽管当我继续执行该程序时,se 和 se2 数组似乎获得了随机值。我知道数组的大小很大,但我需要处理这么多的数据。

我也尝试过在 matlab 中工作,并且没有出现任何错误。这是我在 matlab 中使用的代码,一切都很好,所以我猜 .dat 文件没有问题,但只有我的代码有问题。

f = fopen ("ref_PRI20.dat", 'r');

Data = fread (f, 12e6, 'double');
fclose (f);

dat=(Data(1:2:end)+1i*Data(2:2:end)).';

这是输入数据的扫描,以便您可以查看格式。我希望它会有所帮助。

enter image description here

任何帮助将不胜感激。

最佳答案

不对 malloc 或 fopen 的原始代码进行错误检查。
由于评论说该文件是在文本阅读器中打开的并且值之间有逗号,因此应使用 fscanf 而不是 fread 来输入值。
由于必须一次扫描一个值,因此不需要 data 或 data2 指针。
无法编译它,因为我没有 cuComplex.h

#include "cuComplex.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int main(void)
{
int n = 12000000; //12.000.000
int lse = n / 2;
FILE *f, *f2;
cuDoubleComplex *se, *se2;

f = fopen("ref_PRI20.dat", "r");

f2 = fopen("surv_PRI20.dat", "r");

se = malloc(lse * sizeof(cuDoubleComplex));
se2 = malloc(lse * sizeof(cuDoubleComplex));
for (int a = 0; a < lse; a++)
{
if ( 1 != fscanf ( f, "%lf ,", &se[a * 2].x])) {
fprintf ( stderr, "could not scan double\n");
break;
}
if ( 1 != fscanf ( f, "%lf ,", &se[a * 2 + 1].y)) {
fprintf ( stderr, "could not scan double\n");
break;
}
if ( 1 != fscanf ( f2, "%lf ,", &se2[a * 2].x)) {
fprintf ( stderr, "could not scan double\n");
break;
}
if ( 1 != fscanf ( f2, "%lf ,", &se2[a * 2 + 1].y)) {
fprintf ( stderr, "could not scan double\n");
break;
}
}
fclose(f);
fclose(f2);
free ( se);
free ( se2);
return 0;
}

关于c - 我尝试打开 .dat 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46630444/

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