gpt4 book ai didi

c - 从 C 中的字符串数组打印 'triangle' 个字符

转载 作者:行者123 更新时间:2023-11-30 21:03:14 25 4
gpt4 key购买 nike

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

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

然后在暂停上方有一个奇怪的符号字符。显然我还无法发布照片,但这就是它所显示的内容。

最佳答案

尽管您似乎走在正确的轨道上,但您的代码存在一些问题。首先,请咨询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");
}

关于c - 从 C 中的字符串数组打印 'triangle' 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com