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

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

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

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

Q&A

解決済

2回答

740閲覧

C言語 do whileについての質問

KALLEN

総合スコア9

C

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

0グッド

0クリップ

投稿2018/07/15 20:09

編集2018/07/15 20:10

全くの初心者で問題集の問題に躓いたため助けていただきたいです。

問 前回と同じ数が入力されるまで、整数を入力する
int x,y;
scanf("%d",&x);
do{


scanf("%d",&x);
}_________

do whileの例題のため下の空欄にはwhile(条件式)というところまではわかったのですが上の空欄に何を入れるべきなのかがわかりません。初歩的なもので申し訳ありませんがお答えいただけると幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ループを使わずに3回入力させ前回入力と同じものがあるか
という問題を考えます

c

1int x,y; 2scanf("%d", &x); 3scanf("%d", &y); 4if(x == y){ 5 puts("以前の入力と同じ"); 6 return; 7} 8scanf("%d", &x); 9if(x == y){ 10 puts("以前の入力と同じ"); 11 return; 12} 13puts("同じ入力はなかった");

ざっとこんな感じです。
しかし、xとyを交互に使うのでは今回の穴埋めには形式があいません

そこで

c

1scanf("%d", &x); 2y = x; 3scanf("%d", &x); 4if(同一入力か?) おわり; 5y = x; 6scanf("%d", &x); 7if(同一入力か?) おわり;

みたいな感じに退避させる事を考えると

c

1scanf("%d", &x); 2do{ 3 y = x; 4 scanf("%d", &x); 5}while(x != y);

と穴埋め可能です。

投稿2018/07/15 20:44

asm

総合スコア15147

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

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

KALLEN

2018/07/16 04:22

丁寧な解説ありがとうございます。今回はより質問に沿っていたためベストアンサーとさせていただきました。ありがとうございました。
guest

0

とりあえず do-while 文を説明しますね。

do-while 文は、条件判定を後に行うタイプの繰り返し構文です。

c

1do { 2 ここでやりたい処理をします。 3} while (繰り返しを継続したい条件を書きます);

これは、まず最低一回中身を実行して、その後、条件を判断します。この条件を満たしていれば繰り返しますし、そうでなければ繰り返しを止めます。

例 1 : あまり do-while が嬉しくない例ですが。

c

1int i = 0; 2do { 3 i++; 4} while (i < 3);

これであれば、

  1. i に 0 を代入
  2. == do ==
  3. i に 1 を足す。
  4. == while == (i < 3 なら繰り返す)

という処理になります。つまり繰り返しに伴って i は 0 -> 1 -> 2 -> 3 となり、こうなった時点で i < 3 が満たせなくなるため繰り返しは終了です。

例 2

c

1int i; 2do { 3 printf("0 を入力するまで終了しませんよ -> "); 4 scanf("%d", &i); 5} while (i != 0);

実行例

0 を入力するまで終了しませんよ -> 1 0 を入力するまで終了しませんよ -> 4 0 を入力するまで終了しませんよ -> 2 0 を入力するまで終了しませんよ -> 3 0 を入力するまで終了しませんよ -> 0

これであれば、

  1. i を宣言する
  2. == do ==
  3. 説明メッセージを表示
  4. 入力を i に受け取る
  5. == while == (i が 0 でない間繰り返す)

つまり、繰り返しごとに毎回入力を受け付け、その入力が 0 のとき終了したい 、つまり、 0 でないとき繰り返しを続けたい ということになります。

例 3

c

1int i = 10000; 2do { 3 i++; 4 printf("%d\n", i); 5} while (i < 0);

do-while の特徴として条件判定を最後にする、というものがあります。
上のプログラムは i に 1 を足して結果を表示するだけのプログラムですが、条件を見ると i < 0 となっていますね。最初から int i = 10000; としていますから、i < 0 になんてなりっこないです。でも、 do-while は条件判定を後でやるので、この場合よく見たら条件は満たしていないけれども、とりあえず一回は中身が実行されます。

投稿2018/07/15 20:57

Eki

総合スコア429

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

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

KALLEN

2018/07/16 04:13

詳細な解説に加え、複数の例までありがとうございます。大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問