在C语言中的二维字符数组

15 浏览
0 Comments

在C语言中的二维字符数组

帮我解决这个问题。我正在使用GCC在ubuntu12.04上。当我编写这个程序从键盘上获取5个字符串并将这些字符串打印在屏幕上时。程序编译通过,但在执行过程中它从键盘上获取字符串,但只打印最后一个字符串。我编写的程序如下:

void main()
{
    char names[10];
    int i, j;
    
    for (i = 0; i < 5; i++)
    {
        printf("请输入您想注册的名字\n");
        scanf("%s", names);
    }
    
    for (i = 0; i < 5; i++)
    {
        printf("您输入的名字是%s\n", names);
    }
}

0
0 Comments

问题的出现原因:

这个问题的出现是因为在C语言中,字符数组是一维数组,只能存储一串字符。但是在某些情况下,我们可能需要存储多个字符串,这就需要使用二维字符数组。

解决方法:

解决这个问题的方法是使用二维字符数组。二维字符数组是由多个一维字符数组组成的,可以存储多个字符串。在C语言中,可以通过声明一个二维字符数组来实现。

在上面的代码示例中,首先声明了一个名为items的二维字符数组。这个二维字符数组的大小是6x20,可以存储6个长度不超过19的字符串。然后通过循环,使用scanf函数逐个从标准输入中读取字符串,并将其存储到items数组中的每个一维数组中。最后,通过循环打印出存储在items数组中的所有字符串。

通过使用二维字符数组,我们可以方便地存储和处理多个字符串。这在很多情况下都是非常有用的,比如存储用户输入的多个字符串、处理文件中的多行文本等等。

0
0 Comments

在C语言中,当我们需要使用二维字符数组(Two Dimensional Array of Characters)时,可以使用以下两种方法。

第一种方法是使用二维字符数组,代码如下:

char names[5][100];

其中,二维数组中的每一行都是一个大小为100的字符数组。

接下来,我们可以使用循环来输入每个字符串:

for(i=0;i<5;i++)  
{
    printf("请输入要注册的姓名:\n");  
    scanf("%99s",names[i]);
}

第二种方法是使用指针数组,代码如下:

char *names[5];

在这种方法中,数组的每个元素都是一个指向字符串(字符数组)的指针。在调用scanf()函数之前,需要将数组中的每个指针分配给一个内存空间。

for(i=0;i<5;i++)  
{
    names[i]=malloc(100);  
    printf("请输入要注册的姓名:\n");  
    scanf("%99s",names[i]);
}

第三种方法是在使用gcc版本大于2.7时,可以使用"%ms"来替代"%s",从而使scanf()函数自动分配内存。

char *names[5];
for(i=0;i<5;i++)  
{
    printf("请输入要注册的姓名:\n");  
    scanf("%ms",&names[i]);
}

以上是关于如何使用二维字符数组的三种方法。如果你在编译时遇到了scanf()函数的错误,可能是因为代码中有个拼写错误,需要在"name"后面添加一个's'。

0
0 Comments

在你的程序中,错误的地方在于你没有在第一个for循环中使用'&'地址运算符。在你的情况下,names是一个数组,如果你将%s字符串存储在names中而不是&names[0]或&names[1]等等,那么由于数组本身就是一个指针,因此数组"names"指向其第一个元素的地址,即names[0]。所以如果你写scanf("%s",names);这与scanf("%s",&names[0]);相似,所以只有最后一个字符串被存储,之前的字符串都会消失。所以你的程序只打印最后一个字符串。

这个问题的原因是在使用scanf函数读取字符串时,没有正确指定数组的地址。解决方法是在scanf函数中使用正确的地址,即&names[0]或&names[1]等等。这样就能够正确地存储和读取多个字符串。

下面是修改后的代码示例:

#include 
int main() {
   char names[5][20];
   int i;
   for(i = 0; i < 5; i++) {
      printf("Enter a name: ");
      scanf("%s", &names[i]);
   }
   printf("\nNames entered are:\n");
   for(i = 0; i < 5; i++) {
      printf("%s\n", names[i]);
   }
   return 0;
}

通过这种方式,你可以正确地存储和打印出多个字符串。

0