1. 程式人生 > >關於二維(字元)陣列的輸入問題

關於二維(字元)陣列的輸入問題

在解決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)。