2017-01-16 19 views
0

我已經嘗試了下面的代碼來打印函數項(foo)和退出(koo)。但是它在執行時會給出隨機符號。打印功能進入和退出帶空格

#include <stdio.h> 
char spa=' '; 
void foo() 
{ 
    printf("hai"); 
    spa*=2; 
    printf("\n%c",spa); 
} 
void koo() 
{ 
    spa/=2; 
    printf("%c\n",spa); 
    printf("haikoo"); 
} 
int main() 
{ 
    foo(); 
    foo(); 
    foo(); 
    foo(); 
    foo(); 
    koo(); 
    koo(); 
    koo(); 
    koo(); 
    koo(); 
    return 0; 
} 

輸出

hai 
@hai 
�hai 
hai 
hai 

haikoo 
haikoo 
haikoo 
haikoo 
haikoo 

我想作爲

hai 
    hai 
    hai 
     hai 
     hai 
     haikoo 
     haikoo 
    haikoo 
    haikoo 
haikoo 

輸出我怎樣才能得到它?我在哪裏犯錯?它用於函數調用和函數退出的圖形表示。這只是一個示例程序。我在Linux中使用gcc進行編譯。

+1

'spa * = 2;'不會做你(可能)認爲它所做的事情。 –

+0

@MartinR那該怎麼辦呢? – KPJ

回答

3

您正在修改空間' '字符的符號值,而不是空格的數量。爲了得到你想要的輸出,你需要一個計數器變量。

例如:

// naive solution 
#include <stdio.h> 

int count=0; 

void print_spaces (int spaces) 
{ 
    for(int i=0; i<spaces; i++) 
    { 
    printf(" "); 
    } 
} 

void foo(void) 
{ 
    print_spaces(count++); 
    printf("hai\n"); 
} 

void koo() 
{ 
    print_spaces(--count); 
    printf("haikoo\n"); 
} 

int main (void) 
{ 
    foo(); 
    foo(); 
    foo(); 
    foo(); 
    foo(); 
    koo(); 
    koo(); 
    koo(); 
    koo(); 
    koo(); 
    return 0; 
} 

更重要的是,不要使用任何全局變量,因爲這是很糟糕的做法。使用循環並將計數器留給呼叫者:

// good solution 
#include <stdio.h> 

int count=0; 

void print_spaces (int spaces) 
{ 
    for(int i=0; i<spaces; i++) 
    { 
    printf(" "); 
    } 
} 

void foo(void) 
{ 
    printf("hai\n"); 
} 

void koo() 
{ 
    printf("haikoo\n"); 
} 

int main (void) 
{ 
    for(int i=0; i<5; i++) 
    { 
    print_spaces(i); 
    foo(); 
    } 
    for(int i=4; i>=0; i--) 
    { 
    print_spaces(i); 
    koo(); 
    } 

    return 0; 
} 
+0

Nitpick,但是對於打印空格而言,是不是'printf'有點沉重的函數可以調用? – StoryTeller

+0

@StoryTeller確實。實際上,在生產代碼中應該避免整個stdio.h。但這並不是初學者需要擔心的問題。 – Lundin

1

char spa=' ';是字符。 C中的字符是一個完整的數據類型。因此spa *=2;將字符值乘以2.它不會將字符連接到自身以形成兩倍的字符串。

0
#include <stdio.h> 
char spa=' '; 
static int i=0; 
void foo() 
{ 
     int j=0; 
     for(j=0;j<i;j++) 
      printf("%c",spa); 
     printf("hai\n"); 
     i+=2; 
} 
void koo() 
{ 
     for(int j=0;j<i-2;j++) 
      printf("%c",spa); 
     printf("haikoo\n"); 
     i-=2; 
} 
int main() 
{ 
    foo(); 
    foo(); 
    foo(); 
    foo(); 
    foo(); 
    koo(); 
    koo(); 
    koo(); 
    koo(); 
    koo(); 
    return 0; 
} 
+0

請考慮添加一些關於如何解決問題的討論!此外,嘗試以一致的方式縮進您的代碼! – hmofrad