打印多维字符数组
Print multidimensional array of chars
我正在尝试在 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;
}
它没有提供我想要的输出。我尝试了几种方法,但没有运气。
好吧,你可以遵循一个简单的逻辑,打印所有 text[i]
并在索引为奇数(偶数迭代)时添加换行符,例如
for(i=0; i<10; i++)
{
printf("%s\t", text[i]);
if ( i%2 ) puts("");
}
否则,另一种奇特的方法是插入 (append) tab 或 newline 进入打印语句本身,基于迭代(索引)号,如
for(i=0; i<10; i++)
{
printf("%s%c", text[i], i%2?'\n':'\t');
}
您可以修改循环以获得所需的输出 -
for(i=0; i<9; i=i+2){
printf("%s %s\n", text[i], text[i+1]);
}
此循环将以所需格式打印索引为 i
和 i+1
的数组内容。就像索引 0
和 1
、 2
和 3
等处的值一样。
从您的描述中不清楚您是需要二维字符串数组还是二维字符数组(因此是一维字符串数组)。如果第一个是真的那么试试:
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;
}
您的数据被组织为一个 10 元素的 char 数组,每个数组具有 space 80 个字符(包括零终止符)。1 偶数元素, 0、2、4等包含数字字面量,奇数元素1、3、4等包含这些数字的名称。顺便说一句:80 个字符是很多 space 为这种短字符串保留的。
输出格式应为两列,第一列为偶数元素,第二列为奇数元素,每行如下所示:
number
→name
↵
至于在循环中做这个,我觉得很有趣2到select格式参数 对于 printf
取决于索引 i
是奇数还是偶数:3
#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 尽管编写和格式化代码尽可能接近应该解决的问题通常是个好主意,但它有时会混淆真正发生的事情。这就是编译器 "sees":
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 我发现它最能反映给定的任务。如果您对 "fastest" 代码感兴趣, 似乎是个好方法。
3 在 live demo.
中查看此代码 运行
我正在尝试在 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;
}
它没有提供我想要的输出。我尝试了几种方法,但没有运气。
好吧,你可以遵循一个简单的逻辑,打印所有 text[i]
并在索引为奇数(偶数迭代)时添加换行符,例如
for(i=0; i<10; i++)
{
printf("%s\t", text[i]);
if ( i%2 ) puts("");
}
否则,另一种奇特的方法是插入 (append) tab 或 newline 进入打印语句本身,基于迭代(索引)号,如
for(i=0; i<10; i++)
{
printf("%s%c", text[i], i%2?'\n':'\t');
}
您可以修改循环以获得所需的输出 -
for(i=0; i<9; i=i+2){
printf("%s %s\n", text[i], text[i+1]);
}
此循环将以所需格式打印索引为 i
和 i+1
的数组内容。就像索引 0
和 1
、 2
和 3
等处的值一样。
从您的描述中不清楚您是需要二维字符串数组还是二维字符数组(因此是一维字符串数组)。如果第一个是真的那么试试:
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;
}
您的数据被组织为一个 10 元素的 char 数组,每个数组具有 space 80 个字符(包括零终止符)。1 偶数元素, 0、2、4等包含数字字面量,奇数元素1、3、4等包含这些数字的名称。顺便说一句:80 个字符是很多 space 为这种短字符串保留的。
输出格式应为两列,第一列为偶数元素,第二列为奇数元素,每行如下所示:
number
→name
↵
至于在循环中做这个,我觉得很有趣2到select格式参数 对于 printf
取决于索引 i
是奇数还是偶数:3
#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 尽管编写和格式化代码尽可能接近应该解决的问题通常是个好主意,但它有时会混淆真正发生的事情。这就是编译器 "sees":
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 我发现它最能反映给定的任务。如果您对 "fastest" 代码感兴趣,
3 在 live demo.
中查看此代码 运行