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

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

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

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

Xcode

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

Q&A

解決済

2回答

1158閲覧

xcodeで\b(後退)が使えないのはなぜ?

hirosweets1

総合スコア16

C

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

Xcode

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

0グッド

0クリップ

投稿2020/01/03 23:03

新・明解C言語中級編で勉強をしている者です。xcodeで作業をしています。

\bを入力しても後退しない理由がわかりません。これはxcodeを使っていることが原因なのでしょうか。sleep関数についても、本の記載通りに sleepと書くとエラー(Conflicting types for 'sleep')が発生して動かず、mysleepとしたら動き出しました。

入門者なのでテキスト通りに入力してテキパキ学習していきたいところなのですが、なかなかスムーズにいかずに困っています。よろしくお願いします。

#include <stdio.h> int mysleep(unsigned long x) { clock_t c1 = clock(), c2; do { if ((c2 = clock()) == (clock_t)-1) return 0; }while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x); return 1; } int main(void) { int i; printf("ABCDEFG"); for (i = 0; i < 7; i++) { mysleep(1000); printf("\b\b"); fflush(stdout); } return 0; } コード

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

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

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

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

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

guest

回答2

0

\b(後退)は、文字を印字する場所を1つ前に戻すだけなので、
\b\bを印字しただけでは、次の文字の印字場所が
2つ前に戻るだけで、表示上の変化はないと思います。

参考にされている本を読んだことはないですが、
\b\bではなく\b \bのように
\b\bの間にスペース文字が1文字入っていないでしょうか?
\b \bであれば、文字の印字場所を1つ前に戻し、そこに
スペース文字を印字し、もう一度前に戻す動作になるので、
それを繰り返すことで、前の文字が1文字ずつスペース文字で
上書きされ、文字が消えていくようになると思います。

sleepがエラーになる件は、エラーメッセージがわかりにくいですが、
既にsleepが定義されているということではなく、sleep関数が
宣言されていないため、暗黙に宣言されている形式を適用しようとしたが
それとも矛盾していると言っているのだと思います。
Mac(xcode環境)では、
#include <unistd.h>
を追加すれば、sleepが使えるようなると思います。

投稿2020/01/04 02:07

TakeOne

総合スコア6299

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

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

hirosweets1

2020/01/04 02:29

返信ありがとうございます! まさにおっしゃる通り、スペースを入れるのを忘れていました!ありがとうございます! #include <unistd.h>の件なのですが、それを追加してもエラーメッセージは消えずで作動しませんでした。ヘッダファイルの中にsleep関数が定義されているところを発見し、ようやく腑に落ちたところです。
TakeOne

2020/01/04 02:35 編集

質問のコードをコピペして実際に同じエラーが発生することを確かめて回答したんですが、「#include <stdio.h>」以外に別のヘッダファイルをincludeしていたということですか?
hirosweets1

2020/01/04 03:01

大変失礼しました。今確認したところ、#include <time.h>もありました。。includeしたのは、<stdio.h>と<time.h>の2つです。
guest

0

ベストアンサー

¥bで後退するかしないかは、実行するターミナル画面の問題です
後退するように設定する、あるいは後退するようなターミナルを持ってきましょう

sleepと書くとエラー(Conflicting types for 'sleep')が発生して動かず、

すでにsleep関数が定義されているので、同名で仕様の違う関数は定義できません
どうしてもその名前の関数を使いたいなら、関数が定義されているヘッダを読み込まないようにすればいいです

投稿2020/01/03 23:42

y_waiwai

総合スコア87774

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

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

hirosweets1

2020/01/04 00:38

早いお返事ありがとうございます!言われた通りにxcodeではなく、ターミナルでコンパイル してみるとしっかり後退していました!やはり環境によって動作したりしなかったりがあるんですね。勉強になりました。 sleep関数がすでに定義されているからエラーが出てるということなんですね。私のコード上では定義をしてないので、xcodeでは最初からすでに定義されているということになるのでしょうか。
y_waiwai

2020/01/04 00:47

C言語の標準関数としてはsleepってのはないですが、環境により独自に用意してる関数があります ヘッダファイルの中を検索して、どういう定義になってるか探してみてはどうでしょう #Xcode のドキュメントにそこらへんの記述はないでしょうか
hirosweets1

2020/01/04 02:21

お返事ありがとうございます。ヘッダファイルとはなんぞや、から調べてようやくxcodeのヘッダファイルらしきものを発見しました。そこにちゃんとsleep関数が定義されてました!これでスッキリです! waiwaiさんのおかげで気持ちよく勉強再開できます。助かりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問