2016-12-24 51 views
1

我想用c中的scanf來從用戶處獲取5x5矩陣輸入。例如,如果用戶輸入1 2 3 4 5 6 7 8 9 10,我想創建一個像這樣的二維數組:arr [0] [0] = 1,... arr [1] [0] = 6 ..等 輸入也可以換新行。從用戶處獲取矩陣輸入c

我嘗試這樣做:

int main() { 
     int arr[5][5]; eipus(arr); 
     char c; int r=0; int col=0; 
     while ((c=getchar()) != EOF) { 
       if (col >= 5) { col=0; r++; } 

       if (scanf("%d",&arr[r][col]) == 1) { col++; } 
     } 
     printArr(arr); 
     return 1; 
} 

eipus() - 陣列設置爲0。printArr - 打印陣列。

問題是它總是忽略第一個數字。例如:

[[email protected]]$ a.out 
1 2 3 4 5 6 7 8 
2 3 4 5 6 
7 8 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 

數字1被忽略。但是如果在1之前有一個空格,那沒關係。

+1

'c = getchar()'丟棄讀取一個字符。 – BLUEPIXY

+0

請通過http://stackoverflow.com/questions/23572964/getchar-or-putchar-keeps-eating-the-first-character-of-my-input – Codesingh

回答

1

getchar()消耗一個字符。對於更有趣的結果嘗試輸入 12 3 4

然後,您將獲得第一個元素爲2。 使用ungetc()在讀取之前恢復以前的狀態。

while ((c=getchar()) != EOF) { 
       ungetc(c,stdin); 
       if (col >= 5) { col=0; r++; } 

       if (scanf("%d",&arr[r][col]) == 1) { col++; } 
     } 

通過你需要使它int c爲EOF的方式無非是-1

+0

我試過了,你是對的。但我該如何解決它? – Ginger

+0

ah yea ...對不起...我錯過了.. – coderredoc

+0

@BLUEPIXY。:謝謝 – coderredoc

0

輸入變量c被掃描的第一個字符由於線路 while ((c=getchar()) != EOF)

您可以在整個循環中在矩陣元素中輸入掃描的值c