2011-09-27 89 views
0

這是代碼:讀取C中的二維數組字符時遇到麻煩?

#include <stdio.h> 
#include <stdlib.h> 

void acceptMaze(char maze[ROW][COLOUMN], int nrows, int ncols) 
{ 
    int i,j; 
    for (i = 0; i < nrows; i++) 
    { 
     fprintf(stdout,"I = %d",i); 
     for (j = 0; j < ncols; j++) 
     { 
      fprintf(stdout,"J = %d",j); 
      scanf("%c",&maze[i][j]); 
     } 
    } 
} 

WEL在輸入數據,它說i =0 j=0j=1。所以你看到的J = 0不remains.I正在使用Linux系統。可任何解決這個問題。

+2

究竟是什麼問題? – wormsparty

回答

3

您的問題源於%c轉換說明符不會跳過空格的事實。如果前一個輸入操作的輸入流中存在換行符,則調用scanf將讀取該行並將其分配給maze[i][j]

這裏有一個解決方法:

#include <ctype.h> 
... 
for (i = 0; i < nrows; i++) 
{ 
    for (j = 0; i < nrows; j++) 
    { 
    int c; 
    do c = getchar(); while (isspace(c)); 
    maze[i][j] = c; 
    } 
} 

do c = getchar(); while (isspace(c))將讀取輸入的字符,直到你打一個非空白字符。

編輯

唉,我才意識到這個方案的一個醜陋的瑕疵;如果你想要給空白分配一個空白字符到你的迷宮,這將不會像寫入一樣工作。當然,你可以添加到條件表達式:

do c = getchar(); while (isspace(c) && c != ' '); 
0

您需要輸出一些換行符以方便用戶閱讀。如何:

#include <stdio.h> 
#include <stdlib.h> 

void acceptMaze(char maze[][],int nrows,int ncols) 
{ 

    int i,j; 
    for(i=0;i<nrows;i++) 
    { 
     for(j=0;j<ncols;j++) 
     { 
      printf("\nenter %d,%d: ",i, j); 
      scanf("%c",&maze[i][j]); 
     } 
    } 
} 
0

回車鍵被接受爲您的一半查詢的輸入。假設你提示i = 0,j = 0,並且用戶輸入'5',然後輸入回車鍵。 Scanf在迷宮[0] [0]中插入'5',並且在循環的下一次迭代中,它看到回車鍵仍然在緩衝區中,所以它將其插入到迷宮[0] [1]中。

您需要在每次scanf後刷新輸入。一種解決方案是#include <iostream>,並在每次scanf後調用std::cin.ignore()

+2

該解決方案無法應用於C問題:) – pmg