2014-04-06 126 views
-13

我不知道爲什麼我沒有從代碼中獲得任何輸出。爲什麼我的電話printf()不顯示任何輸出?沒有得到預期的printf輸出

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int k=0,l=0,x=0,y=0,j=5,i=7; 

    printf("I am above 1st if"); 
    if (i > j) 
    { 

     x=i; 
     i=j; 
     j=x; 
    } 

    for (k = i, x = 0 ;; k%=2,x++) 
    { 

     for (y = 0 , l = j ; l > 0 ; y++) 
     { 
      if (l == k) 
      { 
       break; 
      } 
      l%=2; 
     } 
    } 

    printf("%d\n", x+y); 
    return 0; 
} 
+1

歡迎來到SO。請閱讀[如何提問](http://stackoverflow.com/questions/how-to-ask)和[幫助中心](http://stackoverflow.com/help)瞭解如何提出問題。 – Deduplicator

+3

「printf不工作」是一個非常大膽的陳述。你的電腦工作嗎?你能編譯這個程序,並正確執行它嗎?這是着名的「程序寫入終端,然後終端關閉」的問題? ...無論如何,這個代碼是什麼? – usr2564301

+0

對不起。我確實知道這個規則。請幫助我。\ – jahan

回答

7

您的代碼存在很多問題,而且您的問題並非如此明確。然而,問題突出的最多的是:

for (k = i, x = 0 ;; k%=2,x++) 

這個循環沒有終止條件,沒有它裏面的代碼將導致循環退出或者(注意:break只有跳出循環的是因此,內循環break停止內循環,但對外循環沒有影響)。因此,它永遠運行。這就是爲什麼你的最終printf永遠不會到達(printf本身工作得很好),你的程序永遠不會退出。

無論你的程序應該做什麼,你都必須考慮一下,並確保你的代碼正確地反映了你正在執行的算法。有時,在將它們轉換爲代碼之前,先將這些類型的東西用在紙上,這有助於它們的發展。

在調試器中逐步完成這種事情可以爲您提供很多關於程序流的信息。順便說一句,如果你從來沒有看到第一個printf,這是因爲默認stdout是行緩衝的,這意味着有時需要換行或顯式刷新來強制緩衝輸出實際顯示。並不是沒有達到第一條語句,而是緩衝區永遠不會被刷新,所以它永遠不會顯示。

+0

謝謝我使用了休息線。我認爲這應該是終結者。 – jahan

+0

@jahan'break'只會終止它所在的循環,它不會終止任何外部循環。你需要添加一些邏輯來允許外層循環。 –

+0

哦,我弄錯了。 – jahan

2

第一個printf看起來不起作用的原因是因爲stdout的默認行爲是緩衝字符,直到打印換行符。如果向第一個printf添加換行符,則輸出將顯示在控制檯上。

printf("I am above 1st if\n"); 

如果你不想換行,那麼你可以強制輸出使用fflush功能顯示。

printf("I am above 1st if"); 
fflush(stdout); 
+0

我認爲這會解決我的問題。 – jahan

+1

它會解決你的問題@jahan的一部分,但不是全部。 – Bart

+0

@Bart,但我想他試圖使用'printf'作爲調試工具,只需要知道爲什麼printf不工作。我同意jahan所有的反對票都是粗魯的。 – user3386109