2015-04-22 28 views
-3

有人能幫我解釋一下這個問題嗎?當我編譯它時,它不會滿足於任何輸入。此外,自我調用主要功能的原因是什麼?這個程序做什麼? (Self calling main function + getchar)

以下程序做了什麼?證明你的答案。

#include <stdio.h> 
int main (void) { 
    int c; 
    if ((c = getchar()) != EOF) { 
     main(); 
     printf("%c", c); 
    } 
    return 0; 
} 
+1

查看上一個問題,還有很多其他的:http://stackoverflow.com/questions/7937789/how-does-the-c-code-that-prints-from-1-to-1-000-without-loops - 或 - 條件統計 –

+0

這看起來像一個程序,可以反向打印stdin,但它可能會堆棧溢出的任何大型輸入。 –

回答

1

程序滿意,通過getchar()返回EOF,通過輸入Ctrl^Z(Windows控制檯)實現輸出的程序文件名或者Ctrl-D(Linux)。該程序將繼續遞歸,直到發生這種情況(除非堆棧中斷)。在獲得EOF後,它將退出所有遞歸打印輸入的逆序(包括代表EOF的字符)。

請注意,鍵入的EOF必須是Enter鍵之後的第一個按鍵。

1

這是一個遞歸函數,在由用戶輸入的字符,直到文件密鑰組合的端部將被壓相反的順序相呼應。因爲它的輸入和輸出之間存在的主要

if ((c = getchar()) != EOF) { 
     main(); 
     printf("%c", c); 
    } 

下一個呼叫所以這porgram模擬堆

第一enetered字符將被outputed最後。

下面是一個類似的計劃,以相反的順序

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    if (*argv != NULL && **argv != '\0') 
    { 
     char c = *(*argv)++; 
     main(argc, argv); 
     printf("%c", c); 
    } 

    return 0; 
} 
相關問題