C 读取表文件并将其存储在数组中时出现问题
我想读取并存储在一个数组C 读取表文件并将其存储在数组中时出现问题,c,segmentation-fault,scanf,C,Segmentation Fault,Scanf,我想读取并存储在一个数组a文件中,该文件包含n行和m列: 8.315287e-07 1.422122e-28 9.128814e-32 8.693229e-28 1.015631e-06 1.422121e-28 9.128802e-32 8.693270e-28 1.240495e-06 1.422119e-28 9.128784e-32 8.693241e-28 我编写了以下代码: FILE* file = N
a
文件中,该文件包含n
行和m
列:
8.315287e-07 1.422122e-28 9.128814e-32 8.693229e-28
1.015631e-06 1.422121e-28 9.128802e-32 8.693270e-28
1.240495e-06 1.422119e-28 9.128784e-32 8.693241e-28
我编写了以下代码:
FILE* file = NULL;
double intensity[46][7] = {{0}};
int score[2][3];
int kloop = 0;
double sum=0;
file = fopen("intensity", "r");
// if (file = NULL) printf("file = NULL");
for (kloop = 0 ;kloop < 47;kloop ++){
if (fichier != NULL)
{
fscanf(file, "%d %d ...", &intensity[i][0],&intensity[i][1]...;
printf("%e %e \n",intensity[i][0], intensity[i][1]...]);
}
}
fclose(file);
然后,当我取消注释第7行时,我得到一个“分段错误”错误。
它正在处理一个包含整数的简单文件:
1 2 3
4 5 7
知道问题出在哪里吗?在:
if(file=NULL)
你应该把
if(file==NULL)
因为您想要比较的结果(相等),但是您正在将
NULL
值赋给变量。fscanf(…,%d“,…)
->fscanf(…,%lf“,…)
它确实在工作,非常感谢。为什么%d无效?我认为它包含一个地址,所以是一个整数。您应该检查fscanf
中的返回值,查看它读入了多少值,以便处理错误/failures@ludmi指定要读入的类型,在本例中为double
(%lf
)。您总是将地址传递给scanf
函数,因为C是按值传递的(否则无法修改)。格式说明符(%s
,%d
,%f
,%lf
等)必须与参数类型匹配(char*
,int*
,float*
,double*
,…)。请帮自己一个忙,让编译器警告您发现错误的情况。如果启用了编译器警告,编译器可能会告诉您。请始终启用编译器警告(-Wall-Wextra-pedantic
表示gcc/clang;而/W3
表示VS)在代码编译之前,不要接受代码,除非没有警告。(请参阅@Osiris的原始注释-使用不正确的转换说明符会导致读取失败,并可能导致未定义的行为)
1 2 3
4 5 7