2015-09-06 90 views
2

我想根據用戶輸入打印由數字和美元符號組成的模式。我要求用戶選擇一個模式的選項,然後我要求模式的大小。我使用交換來創建模式,所以如果用戶選擇選項1然後輸入4的大小,他們應該得到類似的東西:打印陣列元素給出錯誤的輸出

4 $$$ $ 4 $$ $$ 4 $ $$$ 4。

現在我只是想讓patternOne(0工作。我無法打印出我在patternOne()函數中創建的數組元素。這裏是我的代碼:

#include <stdio.h> 

int main(void) { 

    int option, size; 
    do { 
     printf("\nMENU\n"); 
     printf("1. Pattern one\n" 
       "2. Pattern two\n" 
       "3. Pattern three\n" 
       "4. Pattern four\n" 
       "5. Quit\n"); 
     fflush(stdout); 

     do { 
      printf("Please enter your choice (between 1 & 5): "); 
      fflush(stdout); 
      scanf("%d", &option); 
     }while(option < 1 || option > 5); 

     switch(option) { 
      case 1: 
       do { 
        printf("Choose a pattern size (between 2 & 9): \n"); 
        fflush(stdout); 
        scanf("%d", &size); 
       }while(size < 2 || size > 9); 
       patternOne(size); 
       break; 

      case 2: 
       printf("Testing case 2."); 
       break; 

      case 3: 
       printf("Still testing."); 
       break; 

      case 4: 
       printf("Testing case 4."); 
       break; 

      case 5: 
       printf("Thank you for playing.\n"); 
       break; 
     } 

    }while(option != 5); 

    return 0; 

} 

void patternOne(int size) { 
    char ar[size]; 
    ar[0] = size; 
    for(int i = 1; i < size - 1; i++) { 
     ar[i] = '$'; 
    } 
    int x = 0, y = 1, temp, iter = 0; 
    while(iter <= size) { 
     for(int j = 0; j < size - 1; j++) 
     { 
      printf(j); 
     } 
     temp = ar[x]; 
     ar[x] = ar[y]; 
     ar[y] = temp; 
     x++; 
     y++; 
     iter++; 
    } 
} 
+1

打開編譯器警告。這段代碼中有幾個項目應該關注,其中最值得注意的是'patternOne'中錯誤執行的[**'printf' **](http://en.cppreference.com/w/c/io/fprintf) '函數,爲此您不提供格式字符串。 – WhozCraig

回答

2

首先,你需要有你的函數patternOne()forward declaration,否則,你會得到一個隱含的定義問題。

然後,你patternOne()代碼中,

printf(j); 

應該是,至少

printf("%d", j); 

否則,你會傳遞一個invgalid類型的參數來printf()並調用undefined behaviour

FWIW,你可以通過下面的算法簡化邏輯爲您patternOne()功能

  1. 創建char陣列
  2. memset的到$
  3. 運行一個循環,迭代從0n-1,設置值爲n
  4. 繼續2,直到環用完
0

希望這是你想要的,我修改爲每Sourav戈什建議的代碼,

與此更換你的模式的一個功能,

void patternOne(int size) { 
    char ar[size]; 
    memset (ar, '$', size); 

    for (int h=0; h<size; h++){ 
     for(int i=0; i<size; i++) { 
      if(h==i) 
       printf("%d",size); 
      else 
       printf("%c",ar[i]); 
     } 
     printf(" "); 
    } 
} 

這是輸出我得到

[ This is the output i got [1]