XcodeでC言語を使っています。複数行の出力を全て消したいのです。1行なら\rを使ったり、Windowsならsystem("cls");があるようですが、どのようにすればいいのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/08 03:54
回答1件
0
ベストアンサー
ncurses
ライブラリを使えばできると思います。
erase()
関数を使えば消せます。
C
1#include <ncurses.h> 2 3int main() 4{ 5 initscr(); 6 7 move(10, 20); 8 addstr("Hello World"); 9 getch(); 10 11 // 端末をクリアする 12 erase(); 13 14 move(11, 20); 15 addstr("Hello World 2"); 16 getch(); 17 18 19 endwin(); 20}
上記のサンプルのように、erase()
関数だけでは使えず、最低initscr()
やendwin()
と組み合わせる必要があります。また、ncurses
ライブラリを使うとprintf()
などの標準入出力関数とは相性が悪くなるので、別途置き換えの関数を使う必要も出てきます。
詳しい使い方はネットに沢山のっていますし、ncurses
はcurses
が基本になっていますから、ちょっと古い資料でも参考になるものはありかもしれません。
ちなみに、私はXcodeでCのライブラリをリンクしたことが無いので詳しいことはわかりませんが、たとえば macOS でもコマンドラインでコンパイルするときにはこんな感じで実行します。
% gcc a.c -lncurses
Xcodeで-lncurses
に相当するオプションを指定できればXcodeでもリンクできるとおもいます。
#追記(別解)
Windows での例で示された方法も、macOSでやれないわけではありません。
system()
で clear
を呼び出せば良いのですが、フルパスで指定する必要があります。
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<unistd.h> 4 5int main(void){ 6 printf("Hello World!"); 7 8 fflush(stdout); 9 sleep(5); 10 11 system("/usr/bin/clear"); 12 13 printf("Hello World! 2"); 14}
ただし注意しなければいけないのは、標準入出力はバッファリングするので、たとえば画面の表示を止めているsleep()
関数の前で、fflush(stdout)
を使って意図的に出力を強制する必要があります(試しに、fflush()
を削除して実行してみれば違いがわかるかと思います)。
一方、この例であれば特別なライブラリは使っていませんので、リンカの指定は不要というメリットもあります。
投稿2020/03/08 04:25
編集2020/03/08 04:38総合スコア5086
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。