2015-11-16 39 views
0

我想知道爲什麼它繼續打印1號,即使我在我的文件如何讀取文件並正確地將其打印在數組中?

The input file is: file.in 
2 
4 
0 0 0 0 

FILE *fp; 
fp = fopen("file.in","r"); 

if(fp != NULL) 
{ 
    fscanf(fp, "%d\n", &noOfPuzzles); 
    fscanf(fp, "%d\n", &dimensionOfBoard); 
    int position[dimensionOfBoard]; 
    int value[dimensionOfBoard]; 
    for(i = 0 ; i< dimensionOfBoard; i++) 
    { 
      position[i] = fscanf(fp, "%d ", &value[i]); 
    } 
} 

printf("No. of Puzzles: %d\n",noOfPuzzles); 
printf("Dimension of Board: %d\n",dimensionOfBoard); 
for(i = 0 ; i< dimensionOfBoard; i++) 
    { 
      printf("%d ",position[i]); 
    } 



The output is always like this: 
No. of Puzzles: 2 
Dimension of Board: 4 
1 1 1 1 

沒有1號怎麼說,它保持對印刷數字「1」?謝謝

+0

'position [i] = fscanf(...)':成功時,fscanf返回成功讀取的參數列表中的項數,在這種情況下總是爲1。 – Unimportant

+0

ohhhh!謝謝 –

回答

0

您正在將fscanf()的返回值分配給position[i],該值返回成功填充了多少個值,或者如果發生錯誤,則返回− 1。您需要使用values[i]數組來打印從文件中讀取的零。

+0

錯誤。 'fscanf()'如果成功或不成功則不會返回。它返回已掃描的項目數量,這不僅僅是「合格/不合格」結果。 – fuz

+0

謝謝......在答案中已修正 –

2

你在做什麼方興未艾的fscanf)的返回值(:

 position[i] = fscanf(fp, "%d ", &value[i]); 

你存儲在位置1 [I]因爲fscanf()函數返回1,以表明它填充值爲1 - 你「重新讀取實際值重視[I]然後輸出在位置[I]的值

 fscanf(fp, "%d", &position[i]); 

將工作,輸出在最後一個循環的值[]數組的值。

+0

非常感謝你們。我打印錯誤的數組。 :))) –

0

您對fscanf的使用是錯誤的。 fscanf返回成功掃描的項目數,即您的案例中的1項,因此將1分配給每個成員position。我不知道value陣列的目的是什麼,但你可以直接掃描到position這樣的:

fscanf(fp, "%d ", &position[i]); 
0

您打印出位置[I],您已設置的fscanf的返回值。在這種情況下,Fscanf將讀取值放入第二個參數中,並返回讀取的字符數。您需要打印出值[i]。

相關問題