簡體   English   中英

即使使用換行符和fflush(),printf也不起作用

[英]printf doesn't work, even with newline and fflush()

我正在用gcc編譯以下C代碼。 在編譯期間或運行時不會引發任何錯誤。 我通過與代碼運行gdb ,並在給出的答案sum正確末,尚printf()不顯示在屏幕上任何東西。 我嘗試了fprintf()printf()fflush()各種組合,但是沒有用。

我需要更改什么,以便程序將結果打印到stdout

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

int main()
{
        int num = 9;
        int i, sum; i = 1, sum = 0;
        while (i < 2 * num) {
                sum = sum + i * i;
                ++i;
        }
        printf("sum: %d\n", sum);
        fflush(stdout);
        return 0;
}

該代碼是正確的,對於任何符合要求的實現,應打印sum: 1785

這是一個猜測( 更新:原來是正確的 ),但是...

您已將源文件命名為test.c ,並使用以下命令進行編譯:

$ gcc test.c -o test

(或類似內容)並執行以下命令:

$ test

不會產生任何輸出。

問題在於test是標准的Unix命令(在某些shell中也是內置命令)。 在外殼程序中鍵入命令名稱時,它首先查找內置命令,然后在$PATH環境變量中指定的目錄中查找可執行文件。

要在當前目錄中執行命令,請在名稱前加上./

$ ./test
sum: 1785
$ 

這適用於當前目錄中的任何命令。 有太多內置命令,您無法合理避免與它們發生沖突。 通過輸入./whatever養成在當前目錄中運行可執行文件的習慣, ./whatever意味着名稱沖突並不重要。

(不要被誘惑加入.您的前$PATH ;這是危險想想會發生什么,如果你cd到一個目錄和類型ls ,如果恰好是一個惡意的ls 。命令有)

您的程序沒有任何問題。 必須工作。 嘗試通過重定向運行它:

./a.out > myout

..看看是否有任何輸出。 如果不是,我懷疑某種標准庫不匹配存在問題。

檢查的另一種方法是使用SUN C編譯器而不是gcc進行編譯,然后查看是否可行。 如果是這樣,則gcc是元凶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM