-4

私はコードを持っています:

#include <stdio.h>
int main(void) {
    int c;
    c = getchar();
    putchar(c);

    return 0;
}

コンパイルして実行した後、kたとえば入力すると、出力されk%ます。なぜ印刷されているの%ですか?

編集:私はいくつかのことをテストし、新しい行に到達するためにそれを行っているのはシェル(かなり素晴らしいoh-my-zsh構成でzshを使用しています)であることに気付きました。関数の最後に putchar('\n') を付けましたが、main()出力されません。有益なコメントをありがとう。

(今後の質問を改善できるように、反対票の理由を教えてください)

4

1 に答える 1

1

いくつかのことが原因で、その%サインが表示される可能性があります。

プログラムは改行k なしで出力し、シェルプロンプトは次のようになります。

% 

次のようにプログラムを実行することを意味します。

% ./a.out
k //getchar
k% //putchar + exit + shell prompt

つまり、% は出力の一部ではありません。

もちろん、UB をトリガーするコードには問題があります。C99int以降、暗黙的な戻り値の型は C 標準の一部ではなくなりました。main関数は正しくありません。標準に準拠した主な関数は次のとおりです。

int main(void);
int main (int argc, char **argv);
int main (int argc, char *argv[]);

使用する()ことは同じではありません。

最後に、 から何も返さないでください。mainこれを行う必要があります。最後に追加するだけreturn 0です。

于 2016-02-19T09:53:19.970 に答える