2013-04-22 130 views
0

這是一個程序,主要是爲了在嘗試在較大的程序中使用它之前獲得fopen和類似語法的掛起。所以程序試圖完成的唯一事情就是打開一個文件(scores.dat),讀取該文件中的數據,將其分配給一個數組,然後打印該數組。從不兼容的指針類型中傳遞參數x'y'

這是代碼段的,我有一個錯誤:

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 

回答

5

你錯過的fscanf()第一個參數:

fscanf(score, "%d %d %d %d", &scores[0][0], ... etc. 
     ^^^^^ 
     this needs to be a `FILE *`, and not `const char *`. 
+0

而且因爲'FILE *分數;'是一個指針,他可能會需要使用: '的fscanf(得分, 「%d%d%d%d」,得分[0] [ 0],... etc.' – 2013-04-22 21:57:34

+0

@MehdiKaramosly爲什麼?'fscanf()'修改它的參數。你當然不明白它是如何工作的(以及指針如何工作)。 – 2013-04-22 22:18:02

+0

很長時間我沒有操作指針的地址......我知道,即使矩陣的元素在內存中放置成一個,所以你可以通過很多方式訪問地址:// // score + i * j * sizeof(int);' – 2013-04-22 23:38:07

4

你忘了提檔:

fscanf(score, "%d %d %d %d", &scores[0][0], ...); 
//  ^^^^^ 
1

您對fopen()的理解很好,因爲您已經使用它了rrectly.But你已經通過了fscanf()不其prototype.Here的原型匹配的參數:

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); 
} 
相關問題