2016-04-05 27 views
1

晚上好, 我的任务是创建一个带有框架消息的动态菱形。 我一直在寻找一种方法来做到这一点几个小时,但我真的开始失去理智。创建带有框架消息的菱形

请注意,我的水平是非常基本的,所以我的代码不包含任何复杂的材料。

我设法创建了菱形的上半部分,但我不知道如何在它的中间准确地获取消息。

用户应该能够输入框架的字符串,大小和字符。 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

也许你应该在网格纸上手工完成。然后,只需将您的逻辑思维过程转换为程序代码即可。毕竟,学习这样做是你任务的全部目的。 – hyde

+0

关掉你的屏幕。拿一张纸,写一个*公式*,记录消息长度和行号,并返回星号/空格的数量。然后打开屏幕并编程。 –

+0

谢谢你们,这正是我的教授一直告诉我的。我应该更频繁地听他的指示。我想我的懒惰比我更好。我一定会听取你的建议并写在纸上。非常感谢。我需要这种鼓励来自己做这件事。 – Blai

回答

0

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

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

将3 X无空格之前和STR后需要。