-3

我正在尝试在 C 中打印以下二维字符串数组,如下所示:

char text[10][80] = {
    "0", "Zero",
    "1", "One",
    "2", "Two",
    "3", "Three",
    "4", "Four",
};

输出应该是这样的:

0 Zero
1 One
2 Two
3 Three 
4 Four 

我编写了以下程序:

#include <stdio.h>

int main()
{
    char text[10][80] = {
        "0", "Zero",
        "1", "One",
        "2", "Two",
        "3", "Three",
        "4", "Four",
    };
    int i, j;
    for(i=0; i<6; i++)
    {
        for(j=0; j<1; j++)
        {
            printf("%s ", text[i]);
        }
    }
    return 0;
}

它没有为我提供所需的输出。我尝试了几种方法,但没有运气。

4

4 回答 4

6

您可以修改循环以获得所需的输出 -

for(i=0; i<9; i=i+2){
    printf("%s %s\n", text[i], text[i+1]);
}

此循环将打印带有索引ii+1所需格式的数组内容。像 index0和的值12等等3

于 2016-07-25T08:36:24.617 回答
2

您的数据被组织为一个 10 元素的 char 数组,每个数组都有 80 个字符的空间(包括零终止符字符)。1偶数元素 0、2、4 等包含数字文字,奇数元素 1、3、4 等包含这些数字的名称。顺便说一句:80 个字符是为这样的短字符串保留的大量空间。

输出应格式化为两列,第一列是偶数元素,第二列是奇数元素,每一行如下所示:

numbername

至于在循环中执行此操作,我发现根据索引是奇数还是偶数来选择格式参数很有趣2 : 3printfi

#include <stdio.h>

char text[10][80] = {
    "0", "Zero",
    "1", "One",
    "2", "Two",
    "3", "Three",
    "4", "Four",
};

int main(void) {
    int i;
    for (i=0; i<10; i++) {
        printf( (i&1) ? "%s\n" : "%s\t", text[i]);
    }
    return 0;
}

1尽管编写和格式化尽可能接近应该解决的问题的代码通常是一个好主意,但它有时会混淆真正发生的事情。这是编译器“看到”的:

char text[10][80] = {
    "0",
    "Zero",
    "1",
    "One",
    "2",
    "Two",
    "3",
    "Three",
    "4",
    "Four",
};

...这是初始化用作字符串的 char 数组的一种方便的简短形式,它在内部扩展为

char text[10][80] = {
    {'0'},
    {'Z', 'e', 'r', 'o'},
    {'1'},
    {'O', 'n', 'e'},
    {'2'},
    {'T', 'w', 'o'},
    {'3'},
    {'T', 'h', 'r', 'e', 'e'},
    {'4'},
    {'F', 'o', 'u', 'r'},
};

终止的 `\0' 字符会自动添加,因为每个初始化的值少于其元素的数组都会被默认值填充。

2我发现它最能反映给定的任务。如果您对“最快”代码感兴趣,ameyCU 的答案似乎是一个好方法。

3查看在现场演示中运行的此代码。

于 2016-07-25T15:03:51.810 回答
0

好吧,您可以遵循一个简单的逻辑,打印所有text[i]s 并在索引为奇数(偶数迭代)时添加换行符,例如

for(i=0; i<10; i++)
{
        printf("%s\t", text[i]);

    if ( i%2 ) puts("");
}

否则,另一种奇特的方法是根据迭代(索引)编号将制表符换行符插入(附加)到打印语句本身中,例如

for(i=0; i<10; i++)
{
    printf("%s%c", text[i], i%2?'\n':'\t');
}
于 2016-07-25T08:34:24.050 回答
0

从您的描述中不清楚您是想要一个二维字符串数组还是一个二维字符数组(因此是一维字符串数组)。如果第一个是真的,那么试试:

int main()
{
    char *text[10][80] = {
        {"0", "Zero",},
        {"1", "One",},
        {"2", "Two",},
        {"3", "Three",},
        {"4", "Four",},
    };
    int i, j;
    for(i=0; i<5; i++)
    {
        for(j=0; j<2; j++)
        {
            printf("%s ", text[i][j]);
        }
        printf("\n");
    }
    return 0;
}
于 2016-07-25T08:40:50.250 回答