關於二維(字元)陣列的輸入問題
阿新 • • 發佈:2019-01-08
在解決PAT的團體程式設計天梯賽-練習集的L1_016:點選開啟連結
遇到需要定義一個二維的字元陣列,用於儲存身份證號資訊。此時對於二維陣列的輸入有一些細節問題,很重要。
對於二維陣列的輸入,一般是一行一行的輸入,當然也可以一個個來,但最好的還是一行一行的輸入。
所以一行一行的輸入:
for(int i= 0;i < N;i++)
scanf("%s",perNum[i]);
對於輸入,單個輸入用的是%c,而一行來輸入就是%s。而有一個情況,此時我們的輸入每行都是要存18個數字,所以想法就是設二維陣列的時候,列數就是18。
char perNum[100][18];
那這個時候輸入輸出程式碼:
程式碼的執行結果:char perNum[100][18]; int N; scanf("%d",&N); for(int i= 0;i < N;i++) scanf("%s",perNum[i]); for(int i= 0;i < N;i++) printf("%s\n",perNum[i]);
其中,第一行的2,是說明這個二維陣列的行數。
這個時候發現,輸入沒問題,但輸出的時候,按理來說,應該是2行18列。可是發現第一行的輸出把第二行的輸入也一起輸出了。
這個問題在於,輸出的時候,是根據\0,即換行符號判斷是否要換行輸出。但由於我們設定的列數才18,剛剛好只把輸入給存完,這樣子就沒有地方存換行符(\0)。
所以這裡的改進就是,把二維陣列的列數至少多一位,用於存放換行符。
所以程式碼改為:
執行結果:char perNum[100][19];//比18多一位,存放換行符 int N; scanf("%d",&N); for(int i= 0;i < N;i++) scanf("%s",perNum[i]); for(int i= 0;i < N;i++) printf("%s\n",perNum[i]);
符合我們的要求。
總結:
以後的二維陣列,列數多一位,用於存放換行符(\0)。