我正在使用C语言编写并行openmp,我使用此代码从.txt文件中读取一百万个数据。
FILE *data = NULL;
data = fopen("1millon.txt","r");
float ID, n, cord[1000000],cordy[1000000];
int ale = 1000000;
for(i=0;i<ale;i++){
fscanf (data, "%f %f", &ID, &n);
cordx[i]=ID;
cordy[i]=n;
}
实际上,当我在普通计算机上运行程序时,这个“fscanf”运行良好。但是,如果我想在集群中运行它以进行并行化,它将向我显示下一个警告(警告:忽略'fscanf'的返回值,使用属性warn_unused_result [-Wunused-result]声明 fscanf(data,“%f%f”,&amp; ID,&amp; n); ) 它不会运行。“
你知道如何读取.txt文件而不是“fscanf”,“fread”吗?
由于
答案 0 :(得分:1)
fscanf()
会返回一些内容。它应该可以帮助您发现问题和特殊情况。您的群集已配置为抱怨。您自己的PC没有这样配置,因此它不会发出警告。
为了避免群集上的警告,请不要忽略返回值。即检查你是否成功匹配。
或者执行(void) fsanf...
告诉编译器“我故意忽略有用的返回值。”。
根据opengroup fscanf
manpages(在返回值部分内),当您成功阅读两个{{1}时,您应该希望拨打fscanf
的电话返回2值:
成功完成后,这些函数返回成功匹配和分配的输入项的数量;如果早期匹配失败,此数字可以为0。
如果返回少于2,则需要额外的工作来丢弃错误的输入(参见下面的一个很好的例子),退出进程或以其他方式处理错误。否则,由于float
未读取相同的垃圾,您今后对fscanf
的来电将失败。
stdin