while文を利用して

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kyou

while文を利用して

#1

投稿記事 by kyou » 16年前

はじめまして。お世話になります。
最近独学でCをはじめましたが、どうしてもクリアできません。
(かなり初期の段階で(^^ゞ )

やりたいのは整数を入力して、入力した整数の数だけ「*」を表示したいのです。
ループから抜け出すこともできません。

どうかよろしくお願いいたします。

Dixq (管理人)

Re:while文を利用して

#2

投稿記事 by Dixq (管理人) » 16年前

今作っているプログラムコードがあれば投稿してもらえるとアドバイスしやすいかもしれません。
なお,抜け出すのはbreakで出来ますし,あらかじめループする回数が分かっているなら
for文などを使って決まった数回してやればいいと思います。
(whileでも出来ますが)

conio

Re:while文を利用して

#3

投稿記事 by conio » 16年前

ループから抜け出せないのは恐らく、判定条件が不変になっているからではないでしょうか。

---------------------------------------
while(5){
 printf("*");
}
printf("\n");
---------------------------------------
みたいな。
(上記のプログラムは実行すると物凄い(?)事になります)


やりかたには色々ありますが、とりあえず一例↓
---------------------------------------
int count = 5;
while(count > 0){
  //'*'を表示させる処理
  //変数countに何らかの処理を加える
}
---------------------------------------
日本語で書いてある部分を上手くプログラムに変えれば完成します。

上記のプログラムは、初めから値を入れています。
キーボードからの入力にする場合は"scanf関数"に修正すれば問題ないと思います。

kyou

Re:while文を利用して

#4

投稿記事 by kyou » 16年前

Dixq様 conio様

早速ありがとうございます。

自分で考えれたのは


int n ;

scanf("%d",&n);
printf("\n%d",n);

while(n>0){

  printf("*");
}
printf("\n");

この辺りまでです。

なさけないですが、ここからどう抜け出すのか?
また、これで整数を入力した数だけ*が表示できるのか?
ほとんどわかっていません。
(これまでのテキストの流れで・・・こんなこと考えています。)

全くわかっていなくて 申し訳ございません<(_ _)>

MNS

Re:while文を利用して

#5

投稿記事 by MNS » 16年前

int n;

scanf("%d",&n);

 例えば、9という値を入力したとします。
 これはそのままnの値になりますね。


printf("\n%d",n);

 9と表示されるでしょう。


while(n>0){

  printf("*");
}

 nの値は9です。よって、n>0を満たしています。
 なので、永遠に printf("*") が行われます。
 そもそも、while文というものは、
 while(条件)で、条件を満たしていれば、
 永遠に括弧内の処理が行われます。
 よって、何かのタイミングで、
 条件を満たさなくさせなくてはいけません。
 この場合、条件はn>0ですので、
 nを0以下にすればいいことは分かりますよね?
 どうぞ、ご自分でお考えになってください。

ヒントを与えるとすれば、
9 (n>0)を満たす
8 (n>0)を満たす
7 (n>0)を満たす
6 (n>0)を満たす
5 (n>0)を満たす
4 (n>0)を満たす
3 (n>0)を満たす
2 (n>0)を満たす
1 (n>0)を満たす
0 (n>0)を満たさない
満たす数を数えてみてください、活路が見出せませんか?

kyou

Re:while文を利用して

#6

投稿記事 by kyou » 16年前

MNS様

ヒントまでありがとうございます。

満たす数は上記の場合9です。ということは
n+1で抜け出せるのでしょうか?

クロウ

Re:while文を利用して

#7

投稿記事 by クロウ » 16年前

while文は( )の中がtrue(成立する)限り{}の中を繰り返す文です。
つまり
while(1){
  ・・・・
}
にすると無限ループをするわけです。

kyouさんの場合ですと、
while文の条件の(n>0)がずっと成り立っているので、0以下を入力しない限り無限ループを起こしているわけです。
これが成り立たないようにつまり、n<=0にしてしまえばwhile文は抜けることになります。
つまり、while文の中でnを減らしてやればいいのです。

ちなみにn -= 1(省略形 n--) は、今のnの値を1減らしてくれるものです。
while突入→*を描画→
n = 9のとき、n - 1 = 8を代入→(whileの条件を判定:n > 0が成立)→*を描画→
n = 8のとき、n - 1 = 7を代入→(whileの条件を判定:n > 0が成立)→*を描画→
・・・・
では、
n = 1のときはどうなると思いますか?

kyou

Re:while文を利用して

#8

投稿記事 by kyou » 16年前

クロウさん。みなさん。
ありがとうございます。

できましたぁ。
ただし、再度みなさんが伝えてくださったことを
しっかり理解して出来るように、頑張って勉強します。

本当にありがとうございます。

閉鎖

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