程序不输出存储在数组中的字符串

时间:2017-02-16 19:44:33

标签: c arrays string

我正在编写一个程序来显示公寓名称和公寓数量,但是,存储名称的数组无法显示名称,表明他们未被识别。反正有没有显示数组中包含的字符串?此外,我似乎得到n显示在显示器公寓数量之下的价值,无论如何要摆脱这个?这是我的代码:

#include <stdio.h>

int main(void)
{
    int i;
    char name[] = {North, West, South, East};
    int apt[] = {24, 30, 14, 18};
    const int n = 5;

    printf("Name    No. of Apartments\n");
    for (i = 0; i < n; i++)
            printf("%c        %d\n", name[i],  apt[i]);

    return 0;

}

3 个答案:

答案 0 :(得分:2)

以下是您的代码,已更正:

#include <stdio.h>

int main(void)
{
    int i;
    char *name[] = {"North", "West", "South", "East"}; /* You're declaring an array of characters, you need an array of strings/pointers */
    int apt[] = {24, 30, 14, 18};
    const int n = 4; /* you have 4 elements in your array, not 5 */

    printf("Name    No. of Apartments\n");
    for (i = 0; i < n; i++)
        printf("%s %d\n", name[i],  apt[i]); /* %c is for characters, you need %s for strings */

    return 0;
}

答案 1 :(得分:1)

当你需要一个二维数组时,你将一个名称声明为一维数组。

char name[number of names][length of longest name + 1]

此外,用于方向名称的字符串需要用双引号括起来。 所以你的声明应该是这样的:

char name[4][6] = {"North", "West", "South", "East"};

打印字符数组时,请使用指示符%s。 %c仅用于单个字符:

printf("%s %d\n", name[i], apt[i]);

此外,由于for循环从索引0开始,&#39; n&#39;应该从5改为4:

const int n = 4;

答案 2 :(得分:1)

您的问题中显示的是,您对C中strings的概念不熟悉。 所以,你需要知道指针数组。

<强>解决方案

#include <stdio.h>

int main(void) {
    // your code goes here
     int i;

    char *name[4];//Array of pointers to store 2d array of characters.
    name[0]="North";name[1]="West";name[2]="South";name[3]="East";
    int apt[] = {24, 30, 14, 18};
    const int n = 5;
    printf("Name    No. of Apartments\n");
    for (i = 0; i < n; i++)
            printf("%s        %d\n", name[i],  apt[i]);

    return 0;
}

由于数组中的字符串数量仅为4,因此您不应该在n=5次运行循环,否则会为i=4生成一些垃圾值。