【问题标题】:printing a 'triangle' of chars from string array in C从 C 中的字符串数组打印字符的“三角形”
【发布时间】:2014-10-03 19:46:46
【问题描述】:

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

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 name\n");
printf("**********************\n\n");
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

然后是停顿上方的奇怪符号字符。我显然还无法发布照片,但这就是它的表现。

【问题讨论】:

  • 输出是什么样的?它是int main(void)
  • 请分享你从编译器得到的错误,如果它是一个编译问题(我不怀疑它是)。
  • for (j = i; j 什么都不做。 i 总是假的。
  • 另外请不要在单行声明多个变量。由于您是初学者,它会阻止您执行将索引变量声明为 char 之类的事情 - 这很可能会导致溢出:-]
  • 我真的为所有的混乱道歉。林仍然得到使用论坛和诸如此类的窍门。我更正了问题和代码以及示例名称的输出。再次感谢大家的帮助。

标签: c arrays string char geometry


【解决方案1】:

您的代码有几处错误,尽管您似乎走在正确的轨道上。首先,请咨询printf man pages 以了解要使用的正确转换说明符。通常,如果您的格式字符串与您的参数不匹配,则为undefined behavior。您需要在两个地方进行更改:

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

printf("The size of the string is %zu\n", 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");
}

【讨论】:

  • size_t 的正确格式是 %zu 而不是 %zd。这是一个无符号类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多