2013-07-04 119 views
-3

幫助我解決這個問題。我在ubuntu12.04上使用GCC。當我編寫這個程序從鍵盤n獲得5個字符串時,然後在屏幕上打印這些字符串。程序被編譯,但在執行期間,它從鍵盤獲取字符串,但只打印最後一個字符串我所編寫的程序是如下:C中字符的二維數組

void main()  
{ 
    char names[10]; 
    int i,j; 

    for(i=0;i<5;i++) 
    { 
     printf(" Enter a name which you want to register\n"); 
     scanf("%s",names); 
    } 
    for(i=0;i<5;i++)  
     printf(" the names you enter are %s\n", names); 

} 
+6

二維數組是一個數組數組。想一想。 –

+0

你只是有一個數組可以在你的代碼中包含10個字符 – Alexis

+1

其實我是編程初學者。所以不要介意我的問題太過狂野或跛腳...... – ranaarjun

回答

8

1)可以以這種方式

char name[5][100]; 

2D陣列中的每一行是具有大小= 100

字符數組使用2D char數組
for(i=0;i<5;i++) 
{ 
    printf(" Enter a name which you want to register\n"); 
    scanf("%99s",names[i]); 
} 

2)您可以使用指針數組這樣

char *name[5]; 

數組中的每個元素都是一個指向字符串(char數組)的指針。你必須每個指針分配數組的存儲空間中調用scanf()

for(i=0;i<5;i++) 
{ 
    names[i]=malloc(100); 
    printf(" Enter a name which you want to register\n"); 
    scanf("%99s",names[i]); 
} 

3)之前,如果你用gcc和gcc版本編譯> 2.7,然後您scanf()可以通過使用"%ms"代替"%s"

分配內存
char *name[5]; 
for(i=0;i<5;i++) 
{ 
    printf(" Enter a name which you want to register\n"); 
    scanf("%ms",&names[i]); 
}