2016-04-05 44 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後需要。