1

を使用して以下の C コードをコンパイルしていますgcc。コンパイル中または実行時にエラーはスローされません。でコードを実行しましたが、最後に で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;
}
4

2 に答える 2

10

コードは正しく、sum: 1785適合する実装に対して出力されるはずです。

これは推測です (更新: これは正しいことが判明しました) が、...

ソース ファイルtest.cに という名前を付け、次のようにコンパイルします。

$ gcc test.c -o test

(または同様のもの)を実行し、次のように実行します。

$ test

出力を生成しません。

問題は、それtestが標準の Unix コマンド (および一部のシェルの組み込みコマンド) であることです。シェルにコマンド名を入力すると、最初に組み込みコマンドが検索され、次に$PATH環境変数で指定されたディレクトリ内の実行可能ファイルが検索されます。

現在のディレクトリでコマンドを実行する./には、名前の前に次を追加します。

$ ./test
sum: 1785
$ 

これは、現在のディレクトリ内のすべてのコマンドに適用されます。非常に多くの組み込みコマンドがあるため、それらとの衝突を合理的に回避することはできません。入力によって現在のディレクトリで実行可能ファイルを実行する習慣を身に./whatever付けることは、名前の衝突が問題にならないことを意味します。

(危険な.ので、 の前に追加しようとしないでください。悪意のあるコマンドが存在する場合、ディレクトリに入力して を入力するとどうなるかを考えてください。)$PATHcdlsls

于 2013-10-08T20:47:20.537 に答える
0

プログラムに問題はありません。それ働かなければなりません。リダイレクトで実行してみてください:

./a.out > myout

..出力が得られるかどうかを確認します。そうでない場合は、何らかの標準ライブラリの不一致に問題があると思われます。

チェックする別のオプションは、gcc ではなく SUN C コンパイラを使用してビルドし、それが機能するかどうかを確認することです。そうであれば、gcc が原因です。

于 2013-10-08T20:47:57.200 に答える