質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

805閲覧

C言語で出力を全て消したいです。

tyc

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2020/03/08 03:47

XcodeでC言語を使っています。複数行の出力を全て消したいのです。1行なら\rを使ったり、Windowsならsystem("cls");があるようですが、どのようにすればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/03/08 03:54 編集

ターミナルの事ですか? ・・・・・としたら、clearで消えませんか?
tyc

2020/03/08 03:54

いいえ、Xcodeで実行しています。
guest

回答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()などの標準入出力関数とは相性が悪くなるので、別途置き換えの関数を使う必要も出てきます。

詳しい使い方はネットに沢山のっていますし、ncursescursesが基本になっていますから、ちょっと古い資料でも参考になるものはありかもしれません。

ちなみに、私は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
TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問