我正在尝试编写一个程序,该程序接受用户输入字符串并将其打印为7 x 5星号网格。我目前正在试图找出如何打印字母,因为我需要逐行打印,以便不同的字母并排打印。
无论如何,到目前为止我的尝试是:
#include <stdio.h>
#include <string.h>
char capitalA[7][5] = {
" * ",
" * * ",
"* *",
"*****",
"* *",
"* *",
"* *"
};
int i;
int j;
int main()
{//main
for (i = 0; i < 5 ; i++)
{
for (j = 0; j < 7 ; j++)
{
printf("%s\n", capitalA[j][i]);
}
}
return (0);
}//*main
我想要的输出是星号A,但是我收到了分段错误。
答案 0 :(得分:3)
char capitalA[7][5]
不够大。您在初始化中使用的字符串文字自动包含\0
字符,因此您需要使用
char capitalA[7][6]
代替。并将您的循环更改为单个
for (j = 0; j < 7 ; j++)
printf("%s\n", capitalA[j]);
因为您现在使用char
说明符显示%s
。
如果您对自动添加'\0'
并且需要节省空间不满意,可以使用当前拥有的代码,或者使用大括号初始化来初始化数组,如
char capitalA[7][5] = {{' ', ' ', '*', ' ', ' '}, ...};
并坚持按char
显示字符char
(确保使用'%c'
说明符而不是'%s'
)。
答案 1 :(得分:2)
此:
for (i = 0; i < 5 ; i++) {
for (j = 0; j < 7 ; j++) {
printf("%s\n", capitalA[j][i]);
}
}
应该是
for (i = 0; i < 7; i++) {
for (j = 0; j < 5; j++) {
printf("%c", capitalA[i][j]);
}
printf("\n");
}
,因为
char
的正确格式说明符为%c
,而非%s
。 \n
,而不是在内循环的每次迭代中打印。答案 2 :(得分:1)
printf("%s\n", capitalA[j][i]);
应该是
printf("%c", capitalA[j][i]);
您需要的是逐个字符打印,但是您尝试使用%s
打印字符串,该字符串会尝试打印字符串,直到遇到\0
。
由于%s
试图访问数组超出范围,因此您会看到分段错误。
如果您想使用char打印char,请确保在每行后插入\n
答案 3 :(得分:0)
for (i = 0; i < 5 ; i++)
{
for (j = 0; j < 7 ; j++)
{
printf("%s\n", capitalA[j][i]);
}
}
您正在打印char类型数组。不是一个字符。将其更改为
for (i = 0; i < 5 ; i++)
{
for (j = 0; j < 7 ; j++)
{
printf("%c", capitalA[j][i]);
}
printf("\n");
}
答案 4 :(得分:0)
只需使用一个for循环,并在数组声明中将5更改为6,如下所示:
char capitalA[7][6]
// and
for(j=0 ; j<7 ; j++)
printf("%s\n",capitalA[j]);
修改后你的程序会像这样,试试^^:
#include <stdio.h>
#include <string.h>
//edit the column nomber to support the '\0' it will be 6 not 5.
char capitalA[7][6] = {
" * ",
" * * ",
"* *",
"*****",
"* *",
"* *",
"* *"
};
int i;
int j;
int main()
{//main
for (j = 0; j < 7 ; j++)
{
printf("%s\n", capitalA[j]);
}
return (0);
}//*main