传递' y'的参数x来自不兼容的指针类型

时间:2013-04-22 21:53:27

标签: c arrays file

这是一个程序,主要是为了让我在尝试在更大的程序中使用它之前获得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

3 个答案:

答案 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);
}