2013-07-04 157 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]); 
}