这是一个程序,主要是为了让我在尝试在更大的程序中使用它之前获得fopen和类似语法的悬念。所以程序试图完成的唯一事情是打开一个文件(scores.dat),读取该文件中的数据,将其分配给一个数组,然后打印该数组。
这是我遇到错误的代码段:
int scores[13][4];
FILE *score;
score = fopen("scores.dat", "r");
fscanf("%d %d %d %d", &scores[0][0], &scores[0][1], &scores[0][2], &scores[0][3]);
printf("%d &d %d %d", scores[0][0], scores[0][1], scores[0][2], scores[0][3]);
fclose(score);
编译时,我收到错误:
text.c: In function 'main':
text.c:15: warning: passing argument 1 of 'fscanf' from incompatible pointer type
text.c:15: warning: passing argument 2 of 'fscanf' from incompatible pointer type
我该如何解决?
如果它很重要,scores.dat看起来像这样:
88 77 85 91 65 72 84 96 50 76 67 89 70 80 90 99 42 65 66 72 80 82 85 83 90 89 93
98 86 76 85 99 99 99 99 99 84 72 60 66 50 31 20 10 90 95 91 10 99 91 85 80
答案 0 :(得分:5)
您错过了fscanf()
的第一个参数:
fscanf(score, "%d %d %d %d", &scores[0][0], ... etc.
^^^^^
this needs to be a `FILE *`, and not `const char *`.
答案 1 :(得分:4)
你忘了提到档案:
fscanf(score, "%d %d %d %d", &scores[0][0], ...);
// ^^^^^
答案 2 :(得分:1)
您对fopen()
的理解是正确的,因为您已正确使用它。但您为fscanf()
传递的参数与其原型不匹配。这是原型:
int fscanf ( FILE *, const char * , ... );
所以,你应该使用:
fscanf(source,"%d %d %d %d", &scores[0][0], &scores[0][1], &scores[0][2], &scores[0][3]);
关于fopen()
的另一件事。当使用fopen()
打开文件时出现错误然后退出程序时,包含一些显示消息的代码是谨慎的。类似的东西:
if(source==NULL)
{
printf("Error opening file");
exit(1);
}