为什么我不能列出存储在数组中的字符串?

时间:2018-09-22 01:51:33

标签: c

我最近开始学习C。我在使用字符串时遇到一些困难,尤其是在存储名称,短语,单词列表并稍后显示时。这是我的代码:

#include <stdio.h>

int main()
{
    char names[3][10];

    printf("Type 3 names: \n");

    for (int i = 0; i<3; i++)
    {
        scanf("%10s", names);
    }

    printf("\n\nName list:\n\n");

    for (int j = 0; j<3; j++)
    {
        for (int k = 0; k<10; k++)
        {
        printf("%s", names[k][j]);
        }
    }

    return 0;
}

我的目的是存储全名和空格,并在以后显示它们。

运行代码时,程序不会要求输入3个名称,并且不会正确显示已键入的名称。

error

有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:3)

请提高编译器的警告级别。它应该已经警告过您至少两件事:

  

(20):警告C4477:'printf':格式字符串'%s'需要类型为'char *'的参数,而可变参数1的类型为'int'

     

(20):警告C4313:'printf':'%s'格式字符串与类型为'int'的参数1冲突

在您的第一个for循环中,您确实要计数到3,但是却错过了指定要从stdinnames[i]读取的位置。更改

scanf("%10s", names);

scanf("%10s", names[i]);

在第二个循环中,不需要嵌套的for循环,因为printf()将负责打印char中的每个names[j],直到遇到{{1} }终止字符串。所以改变

'\0'

*)由于参数传递给具有可变长度参数列表的函数而传播到int,而格式字符串for (int j = 0; j<3; j++) { for (int k = 0; k<10; k++) { printf("%s", names[k][j]); // doesn't match. names[i][j] is a char *) } } 导致"%s"期望指向printf()的指针。 / p>

char

还请注意,由于您要读取的名称最长为10个字符,因此您的数组必须是

for (int j = 0; j < 3; j++)
{
    printf("%s\n", names[j]);
}

以适应终止的char names[3][11]; // not [3][10] 字符。