2012-06-07 46 views
0

我有像7 4 5 1等文件。我想把這些數字放在一個多維數組中。fgetc()無法正常工作

for(x=0;x<9;x++) 
     for(y=0;y<9;y++) 
     { 
     current=fgetc(fp); 
     if(current!=EOF&current!=' '&current!='\n') 
       sudokuArray[x][y] = current-'0'; 
     } 

此代碼無法正常工作。 sudokuArray [0] [0]給出的結果爲真(文件中的第一個數字),但[0] [1]給出了一些隨機數,如131231304. [0] [2]給出了[0] [1]應該是的。這是爲什麼?

+1

我認爲你應該換用「for x」和「for y」循環。順便說一句,我錯過了當前的定義。另外:你想&&,而不是&。你應該添加一個else子句,將該數組設置爲某個特殊值,例如零或-1。 – wildplasser

+0

如何定義'sudokuArray'?那麼'current'是如何定義的? –

回答

1

這是因爲如果你的內循環:

for(y=0;y<9;y++) 
{ 
    current=fgetc(fp); 
    if((current!=EOF) && (current!=' ') && (current!='\n')) 
     sudokuArray[x][y] = current-'0'; 
} 

如果您輸入7 4 5 1,那麼當y == 0,你讀'7',它被放在sudokuArray[0][0]

現在在你的下一個循環中,y == 1,你讀了' '。由於您的if聲明,您不會將其放入sudokuArray,但y仍然會遞增

下一次你做循環時,y == 2,你讀'4'它被放在sudokuArray[0][2]

因此fgetc()確實可以正常工作,您的代碼完全按照您的要求進行操作。代碼非常聽話。

編輯:另請注意,您的if聲明應包含&&而不是&。他們是不同的運營商。一些空白和一些括號使代碼更易於閱讀和維護。

1

我不知道爲什麼你使用嵌套循環來從文件中讀取。我看到你的代碼一個問題:

變化&到& &:

 if(current!=EOF&current!=' '&current!='\n') 

到:

if(current!=EOF && current!=' ' && current!='\n') 

&&是邏輯AND&是按位與。

因爲,你只有整數,你似乎知道確切的數字。整數。你可以簡單地使用fscanf

fscanf(fp, "%d", &arr[x][y]); 
0

裏面的循環你忽視的人物 - 但此時你遞增指標,即使你沒有填寫相關的數組元素。請嘗試重新實現如:

#include <stdlib.h> 

for(x=0;x<9;x++) 
    for(y=0;y<9;y++) 
     { 
     /* Get next character */ 

     current=fgetc(fp); 

     /* Loop, retrieving additional chars, until either EOF is hit or 
     you find a non-whitespace character */ 

     while(current != EOF && iswhite(current)) 
     current = fgetc(fp); 

     if(current != EOF) 
     sudokuArray[x][y] = current - '0'; 
     } 

而且 - 你要檢查current != EOF,或這應該是!feof(fp)

分享和享受。