2016-04-28 79 views
0

當我有一個簡單的C程序:蝕控制檯窗口奇怪輸出行駛C程序

#include<stdio.h> 
    int main() { 
    int k, r; 
    long int i = 0l, j = 1, f; 

    printf("FIBONACCI SERIES:\n"); 

    // Taking maximum numbers from user 
    printf("Enter the number range:"); 
    scanf("%d", &r); 

    // Printing first two values. 
    printf("\n%ld %ld", i, j); 

    for (k = 2; k < r; k++) { 
     f = i + j; 
     i = j; 
     j = f; 
     printf(" %ld", j); 
    } 

    return 0; 
    } 

當我在C/C++控制檯i必須首先對輸入一個數字(scanf的),在這之後的所需蝕運行它輸出顯示。第一個輸出應該是:

printf(「FIBONACCI SERIES:\ n」);

但是不。我必須先輸入一個數字。那麼剩下如下:

-------------------------- 
8 
FIBONACCI SERIES: 
Enter the number range: 
0 1 1 2 3 5 8 13 
-------------------------- 

當我運行在CMD窗口中excutable文件,它可以作爲希望......

FIBONACCI SERIES: 
Enter the number range:8 

0 1 1 2 3 5 8 13 

(剛開始使用Eclipse)。謝謝。

更改爲:

#include<stdio.h> 
int main() { 
int k, r; 
long int i = 0l, j = 1, f; 

printf("FIBONACCI SERIES:\n"); 

// Taking maximum numbers from user 
printf("Enter the number range:\n"); 
scanf("%d", &r); 

// Printing first two values. 
printf("\n%ld %ld", i, j); 

for (k = 2; k < r; k++) { 
    f = i + j; 
    i = j; 
    j = f; 
    printf(" %ld", j); 
} 
printf("\n"); 
return 0; 
} 

相同的結果:

------------------------------- 
8 
FIBONACCI SERIES: 
Enter the number range: 

0 1 1 2 3 5 8 13 
------------------------------- 
+1

如果你把'newline'在提示結束時會發生什麼像'printf(「輸入數字範圍:\ n」);'?真的,系列印刷之後應該有一個最後的'換行'。 –

+0

有一個已知的臭蟲控制檯輸出,現在掛了幾年現在... –

+0

感謝**很多**。現在我會和它一起生活。 – czt

回答

0

你看到這裏的問題是到緩衝。當您在Eclipse控制檯中運行程序時,您正在使用管道進行操作,並且標準庫將隨之緩衝。但是,當你從終端運行時,你會獲得tty緩衝。默認情況下,管道緩衝stdout將被完全緩衝,但在終端中它將被行緩衝。

你可以通過簡單的刷新緩衝區來解決這個問題。

fflush(stdout); 
printf

/前scanf

另外,您可以強制緩衝帶setbuf

這裏是man setbuf鍵位:

通常所有文件都是塊緩衝。如果一個流指向一個 終端(正常情況下是標準輸出),它是行緩衝的。 標準錯誤流stderr默認情況下始終未緩衝。

最後一點要注意,你應該能夠運行您的程序通過tee重現終端的問題:

$ ./fib_from_so 
FIBONACCI SERIES: 
Enter the number range:8 

0 1 1 2 3 5 8 13 

$ ./fib_from_so | tee output 
8 
FIBONACCI SERIES: 
Enter the number range: 
0 1 1 2 3 5 8 13 
相關問題