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

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

ただいまの
回答率

90.52%

  • C

    3673questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 126

KALLEN

score 1

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

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


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

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

int x,y;
scanf("%d", &x);
scanf("%d", &y);
if(x == y){
    puts("以前の入力と同じ");
    return;
}
scanf("%d", &x);
if(x == y){
    puts("以前の入力と同じ");
    return;
}
puts("同じ入力はなかった");

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

そこで

scanf("%d", &x);
y = x;
scanf("%d", &x);
if(同一入力か?) おわり;
y = x;
scanf("%d", &x);
if(同一入力か?) おわり;

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

scanf("%d", &x);
do{
    y = x;
    scanf("%d", &x);
}while(x != y);

と穴埋め可能です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/16 13:22

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

    キャンセル

+1

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

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

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

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

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

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

これであれば、

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

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

例 2

int i;
do {
  printf("0 を入力するまで終了しませんよ -> ");
  scanf("%d", &i);
} 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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/16 13:13

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

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3673questions

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