• ベストアンサー

#defineで置き換えられない

C言語です。詳しい方、よろしくお願いします。 下記のプログラムをコンパイルして実行したら、画像のようになってしまいます。 コンパイラは、CPad for LSI C-86 ver2.31です。 #include<stdio.h> #define clr() printf("\x1b[2J") void main(void) { while(1){ clr(); printf("test"); } } #defineがどうも置き換えられていないようです。 詳しい方、考えられる原因を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • abaca
  • ベストアンサー率40% (43/106)
回答No.2

置き換えられています。画面をよくみるとちゃんと[2Jと表示されています。 ただし、出力している文字列はエスケープシーケンスといってかなり古いやり方です。また規格ではないので各社で互換性がありません。 だからESC[2Jを出力したら画面が消えるかどうかは使っている環境に依存します。あなたのPCがこのエスケープシーケンスに対応していなかっただけです。 エスケープシーケンスをあなたのPCが処理できるようになるかどうかは別の問題ですし、私にはわかりません。少なくともC言語の問題ではありません。 ちょっと使用しているテキストが古いと思います。

krfy
質問者

お礼

回答ありがとうございます。 エスケープシーケンスはいつでもどこでも使えるものだと思っていました。 system("cls");で画面クリアすることにします。 ありがとうございました。勉強になりました。

その他の回答 (2)

回答No.3

>#defineがどうも置き換えられていないようです。 ちゃんと置き換えられてますよ。試しに、 clr(); を printf("\x1b[2J"); に置き換えても同じ結果になります。 あなたが期待している結果は何なのですか?

krfy
質問者

お礼

回答ありがとうございます。 画面クリアが出来なくて困っていたのですが、他の方の回答も見て、理解しました。 ご指摘の通り、printf("\x1b[2J");にしても全く同じ結果になりました。 他の方法で画面クリアすることにします。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

え? 明らかに置き換えられていますよね. そのエスケープシーケンスであなたの期待する動作ができることは確実なんですか?

krfy
質問者

お礼

回答ありがとうございます。 他の方の回答も見て、理解しました。 問題はマクロ置換じゃなくてエスケープシーケンスの方だったんですね。 もっと勉強します! ありがとうございました。