使用框架消息创建菱形

时间:2016-04-05 17:00:56

标签: c

晚上好, 我的任务是创建一个带有框架消息的动态菱形。 我现在一直在寻找一种方法来做几个小时,但老实说,我开始迷失自己的想法。

请注意,我的关卡非常基础,所以我的代码不包含任何复杂的材料。

我设法创建了Rhombus的上半部分,但我不知道如何准确地将消息传递到它的中间。

用户应该能够输入框架的字符串,大小和字符。 F.ex:

用户输入是:

5,$,你好:

    $
   $ $
  $   $
 $     $
$ Hello $
 $     $
  $   $
   $ $
    $

到目前为止我的代码(很少有未引用的变量,忽略它们):

        void framedMessage()
{
    int size = 6, i, sp, sym, a, b;
    char rSymbol = '$', str[100] = { "Hello" };
    //while ((strlen(str) % 2) == 0)
    //{
    //  puts("Please Enter a string (even number of letters will be denied):");
    //  gets(str);
    //}
    //puts("Please enter a char for the rhombus(NOTE that the letters 'C','M','S','P','E' will return as small chars and not capital:");
    //rSymbol = charInput();
    //size = numericalInput(strlen(str) + 2, 999);
    for (a = 0;a <= size;a++)
    {
        for (sp = 1;sp <= size;sp++)
        {
            if (sp == size && a == 0)
                printf("%c", rSymbol);
            if ((sp == size - a && a != 0))
            {
                printf("%c", rSymbol);
                for (;sp < size + a;sp++)
                {
                    printf(" ");
                    if (sp == size + a -2)
                        printf("%c", rSymbol);
                }
            }
            printf(" ");
        }
        puts("");
    }

}

菱形的上半部分并不那么难,但现在我不知道如何将信息放在一个完全适合空间的方式(请记住,字符串不能有偶数个字符,因为它会破坏菱形。)

我将不胜感激任何帮助。

。关于代码本身的建设性帖子(我应该尝试改进什么,避免使用等等。)

非常感谢。

1 个答案:

答案 0 :(得分:0)

因为在这个例子中你使用了6作为大小。两个'$'之间的下一行中的空格总数将为11.即变量大小-1的值的两倍。所以你得到字符串的长度并使用下面的逻辑将字符串放在中间。

 len = strlen(str);
 x = ( (size*2-1) - len)/2

在x的情况下将是3 x str之前和之后不需要空格。