2016-11-14 66 views
2

代碼的要點是創建由用戶設置的二維維度數組。被提示輸入寬度和高度後,用戶必須將值存入char到2D陣列的每個位置。當使用int :(int mat,int value)實現時,算法工作正常,但是當試圖用char(char mat,char值)實現時,輸出與整數版本不一致。唯一的變化是數組和值的類型,以及將scanf/printf("%d")設置爲scanf/printf("%c)。任何你可以用字符實現這個二維數組的方法?如何用C中的字符填充二維數組?

#include <stdio.h> 

int main() { 

    int width; 
    int height; 

    printf("Enter col and row values between 2 and 20.\n"); 
    scanf("%d %d", &width, &height); 
    printf("The numbers you typed was %d %d\n", width, height); 

    char mat[height][width]; 
    int i; 
    int j; 
    char value; 

    for (i = 0; i < height; i++) { 
     for (j = 0; j < width; j++) { 
      printf("Enter your value.\n"); 
      scanf("%c", &value); 
      mat[i][j] = value; 
     } 
    } 

    for (i = 0; i < height; i++) { 
     for (j = 0; j < width; j++) { 
      printf("%c", mat[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

回答

0

更改此聲明如下方式

scanf(" %c", &value); 
     ^^^^ 

而且改變這種說法有點像

printf("Enter your character value: "); 

,它將更清楚該計劃預計輸入什麼。

1

...輸出不與整數版本

較好的一致性,當然不是。它將是字符而不是整數。否則,它將是一樣的。

另外,你的輸入循環真的很奇怪。

for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     printf("Enter your value.\n"); 
     scanf("%c", &value); 
     mat[i][j] = value; 
    } 
} 

好像你正試圖提示每一個字符,但你只能讀取單個字符。我無法想象你如何期待任何人使用它。如果我想輸入一個「A」,我輸入「A」,但是直到我按下回車鍵後纔會發生任何事情。但是,這將輸入兩個字符。所以這段代碼看起來有點糟糕的設計。

作爲速戰速決,你可以嘗試這樣的:

for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     printf("Enter your value.\n"); 
     do scanf("%c", &value); 
      while (value == '\n' || value == '\r'); 
     mat[i][j] = value; 
    } 
} 
+0

或者使用'scanf(「%c」,...)'。但是,當然,這可以防止實際插入任何空白字符,如果這是可取的... – twalberg

+0

'do' /'while'循環是假的。你可以先用'scanf(「%* [\ r \ n]」)忽略掛起的換行符;'然後用'value =''讀取char; scanf(「%c」,&value);' – chqrlie