0

这来自一个主要为我编写的程序,以便在尝试在更大的程序中使用它之前掌握 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
4

3 回答 3

5

您缺少 的第一个参数fscanf()

fscanf(score, "%d %d %d %d", &scores[0][0], ... etc.
       ^^^^^
       this needs to be a `FILE *`, and not `const char *`.
于 2013-04-22T21:54:59.147 回答
4

你忘了提到文件:

fscanf(score, "%d %d %d %d", &scores[0][0], ...);
//     ^^^^^
于 2013-04-22T21:54:54.323 回答
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()关于.It 的另一件事是包含一些在使用打开文件时出现错误fopen()然后退出程序时显示消息的代码,这是谨慎的做法。就像是:

if(source==NULL)
{
 printf("Error opening file");
 exit(1);
}
于 2013-04-22T22:10:09.267 回答