概ね方位不定だが多分割と偏っている
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


C do while文
2006年08月27日 (日) | 編集 |
新章突入。今度の敵は制御構文?!
馬鹿な…while文は既に終わらせたはず!



最近モチベーション低下してきたなあどうにも。
さて。
以前にやったwhile文は、ループの先頭で条件で判定して繰り返すループだったわけだが、do while文というのはループの終末で条件で判定して繰り返すループなのである。

do{
 なんか文
}while(式);


こんな感じの書式になる。
文を実行した後で式を評価し、式が真である間は文を繰り返す。
while文に比べるとあまり使わないそうなのだが、ある条件で繰り返しを終了する場合に終了する前にもう一度ループ内の文を実行してからループを抜けたいときなんかには便利らしい。

どんな状況やねんソレ?


訳わからんので実際に見てみよう。
a[]で示される文字列を大文字に変換してb[]に格納する関数を作ってみる。

void upr(char a[],char b[])
{
 int i=0;
 do{
  if('a'<=a[i] && a[i]<='z')
   b[i]=a[i]-('a'-'A');


「i=0から始まるint型変数ですよ」
「もしa[i]が'a'以上、且つ'z'以下であるなら」
「b[i]はa[i]から32を引いたものになりますよ(大文字化)」

  else
   b[i]=a[i]
 }while(a[i++]!='\0')
}


「そうでなければ」
「b[i]はa[i]ですよ」
「これをiを+1ずつしながら、a[i]が\0になるまで続けますよ」

void main(void)
{
char dat[80],result[80];
printf("文字列を入力したまえよ。ただしアルファベットで\n");
scanf("%s",dat);


「datとresultは80文字分まで格納できる文字列ですよ」
「datに任意の文字列を入力して頂きますよ」

upr(dat,result);
printf("%s\n",result);
}


「関数uprを呼び出し、引数として文字列datを渡し」
「大文字化した結果を文字列resultとして頂きますよ」
「resultを表示しますよ」

do_while_test.jpgdo_while_test2.jpg
こんな感じ

この構文の利点は最後に判定しているお陰で\0までコピー出来るということだな。
(elseでa[i]が小文字のアルファベット以外ならそのままコピーする為)

おまけ:
メニュー表示の中から項目を選択して表示するというプログラムを作ってみる

do_while_test3.jpgdo_while_test4.jpg
こんな感じ


まとめよう。

do while文でループの最後で繰り返しの判定をするループになる

以上。
ループ自体は既にやってるから楽勝だな。
重要なのは実際に使い分け出来るかどうかだが。

スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。