C言語 do~while文とwhile文

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
⁂せいちゃ⁂
記事: 4
登録日時: 3年前

C言語 do~while文とwhile文

#1

投稿記事 by ⁂せいちゃ⁂ » 3年前

大学の方の課題で自作でプログラムを作る課題があります。
その課題で「利用者が入力した数字以下のフィボナッチ数列を表示するシステム」を作成しようと考えております。
一通りコード?プログラム?(下記に載っております。)が書けたんですが、実行時に少し変で下記の画像のようになります。
具体的に何が変だといいますと、「正の値を入力してください:」と表示され「5[Enter]」と入力してもフィボナッチ数列が表示されず、その下の行に何か打つと実行されるみたいな感じで少しおかしいんです。
私のイメージですと「正の値を入力してください:」→「5[Enter]」→「0 1 1 2 3 5」と表示されてプログラム終了という感じだったんですがどこが間違っているのでしょうか?
教えていただけると助かります。よろしくお願いいたします。
キャプチdededeャ.JPG
キャプチdededeャ.JPG (5.8 KiB) 閲覧数: 3752 回

コード:

 
#include<stdio.h>
int main(void){
  int no;  //入力した値の箱
  int n1, n2, n3;  //フィボナッチ数列の数のための
  n1 = 0;
  n2 = 1;
  do{
    printf("正の値を入力してください:");
    scanf("%d ", &no);
  }while(no <= 0);
  while(n1 <= no){
    printf("%d ", n1);
    n3 = n2 + n1;
    n1 = n2;
    n2 = n3;
  }
  return 0;
}
  

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語 do~while文とwhile文

#2

投稿記事 by みけCAT » 3年前

scanf関数に渡す書式指定文字列中の空白は、
「次の空白文字でない文字の直前まで読み飛ばす」という意味になります。
そのため、空白文字でない文字が入力されるまで入力を要求し続けることになります。
この空白を削除することで、動作を改善できるでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

⁂せいちゃ⁂
記事: 4
登録日時: 3年前

Re: C言語 do~while文とwhile文

#3

投稿記事 by ⁂せいちゃ⁂ » 3年前

空白削除したら動作改善できました!
ありがとうございます!

返信

“C言語何でも質問掲示板” へ戻る