用 C 语言打印字符串数组中的字符"三角形"



我正在尝试制作一个程序,将字符串数组打印为三角形。我在网上查过,只能找到一个数字数组,当我对它进行编码时,会在垂直行中打印出来,如下输出所示。我是编程新手,所以请友善一点。我在找这种类型的三角形。

m y n a m
 e i s b
  r a n
   d o
    n

我的代码是:

#define CHAR 25

main()
{
char string[CHAR] = "";
int i = 0, k = 0, j = 0;
printf("Please enter your namen");
printf("**********************nn");
fgets(string, CHAR, stdin);
puts(string);
pause;
cls;
for (i = 1; i <= CHAR; i++)//start of triangle
{
    for (j = 1; j < i; j++)
        printf(" ");
    for (k = i; k <= CHAR; k++){
        printf("%c ", string[i]);
        printf("n");
    }
}//end of triangle

对于这样一个愚蠢的问题,我很可能会得到一个糟糕的评价,但任何方向都会很好。即使是"嘿,白痴,你为什么这么做…"也要感谢所有的帮助!

这是输出

即字符串名称为"tom"

输出:

o
o
o
o
o
 m
m
m
m

然后停顿上方出现一个奇怪的符号字符。我还不能发布一张照片,但这就是它所显示的。

您的代码出现了一些错误,尽管您似乎走在了正确的轨道上。首先,请参阅printf手册页,了解要使用的正确转换说明符。通常,如果您的格式字符串与参数不匹配,则这是未定义的行为。你需要在两个地方改变这一点:

%d应该是%zu,因为您要处理的是size_t

printf("The size of the string is %zun", strlen(string));

并且您想要打印一个字符,而不是字符串。

printf("%c ", string[i]);

此外,您正在尝试访问具有char类型而不是int类型的数组。更改这些声明:

char string[CHAR] = ""; int i = 0, k = 0, j = 0;

现在来解决你的问题。首先,您正在读取一个可能包含空格的字符串,但您没有考虑到这一点。一种效率相当低的方法是在打印三角形之前从字符串中删除空格。更好的方法是忽略这些空间,即:

if (string[j] == ' ')
// don't print them

其次,您的外循环提供了越界数组访问的可能性:

for (i = 1; i <= CHAR; i++)//start of triangle
{

过于简化的方法可能看起来像:

int line_width = 6;
for (i = 0; i < line_width; i++)
{
    for (s = 0; s < i; ++s)
        printf(" ");
    for (k = i; k < line_width - 1; ++k)
    {
        if (string[j] == ' ')
            ++j;
        printf("%c ", string[j]);
        ++j;
    }
    printf("n");
}

相关内容

  • 没有找到相关文章

最新更新