2014-10-03 76 views
-3

我想制作一个打印字符串数组为三角形的程序。我在网上看过,只能将它看作数字数组,当我编码时,按照下面的输出显示在垂直线上打印出来。我是编程新手,所以请亲切。我正在寻找这种三角形。从字符串数组中打印字符串的三角形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 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 

我将最有可能得到一个差评对于这样一个愚蠢的问题,但任何方向将是巨大的。即使它是一个“嘿白痴,你为什么要这样做......”感谢所有的帮助!

这里是输出

即字符串名称是 '汤姆'

输出:

o 
o 
o 
o 
o 
m 
m 
m 
m 

然后暂停上方的怪异的符号字符。我无法显然发布图片,但这是它显示的内容。

+1

输出是什么样的?它是'int main(void)' – 2014-10-03 19:49:23

+1

如果是编译问题,请分享你从编译器得到的错误(我不怀疑它是这样)。对于(j = i; j Jendas 2014-10-03 19:50:57

+1

*不做任何事情。 *我 2014-10-03 19:53:13

回答

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"); 
} 
+0

'size_t'的正确格式是'%zu'而不是'%zd'。这是一个无符号类型。 – 2014-10-03 21:33:41

+0

@Jen感谢您的纠正。 – 2014-10-03 21:59:35