あれ、存在理由が・・・

アバター
クローバ
記事: 12
登録日時: 15年前
住所: 東京23区内

あれ、存在理由が・・・

投稿記事 by クローバ » 14年前

この間の授業の時に先生が言っていたのですが、do whileを使う事はないよ。
初心者向けのC言語の本には絶対と言って良いほど書いてあるけれど。
使う事はないんだよねw
と言うより、使うな!
車用のコンパイラで使ったのをコンパイルしようとするとエラー吐かれるよと。

理由略

って事で、そこで疑問に思った事が。
じゃあ何で存在するの?

まあ、ざっと考えたところだとdo whileを使わないでも普通にその役割は実現できるし。
それどころか使っていると膨大な行数になったときに改変する際に色々と重大なバグを発生させかねない事も理解できた。

だったら逆に何故そんな無駄な物が存在しているのだろうかと。
フと思ってしまったり。

アバター
パコネコ
記事: 139
登録日時: 15年前

Re: あれ、存在理由が・・・

投稿記事 by パコネコ » 14年前

え…使っちゃだめだったんですか?
あれがないと作るの面倒なものとか結構あるのに…

例えば入力処理とか…
なくてもできるけどあったほうがいい。
do{
printf("100より小さい整数を入力:");
scanf("%d",&a);
while(0<=a && a<100);
とかが
先にaの値を確認しないといけなくなりますし…

私は好きですね。

アバター
ナムアニクラウド
記事: 16
登録日時: 14年前

Re: あれ、存在理由が・・・

投稿記事 by ナムアニクラウド » 14年前

パコネコさんのソースを拝借させていただきます。
do-while使わないのと比較

CODE:

//使う
do
{
	printf( "100以下の自然数を入力:" );
	scanf( "%d", &a );
}while( 0 <= a && a < 100 );

//使わない
while( true )
{
	printf( "100以下の自然数を入力:" );
	scanf( "%d", &a );
	if( 0 <= a && a < 100 )	break;
}
うーん。このプログラムの場合はdo-whileのほうが綺麗かもしれませんね。

アバター
御津凪
管理人
記事: 200
登録日時: 15年前

Re: あれ、存在理由が・・・

投稿記事 by 御津凪 » 14年前

使うコンパイラによりますよ。
普通はC言語にdo whileはあって当然ですし、
goto 文で置き換えれます。
組み込み系のコンパイラだとクローバさんのような制限が多々ありますが。

ちなみにパコネコさんのコードで置き換えると、

CODE:

begin:
    printf( "100より小さい整数を入力:" );
    scanf( "%d", &a );
    if ( a < 100 ) goto begin;
となりますね。(条件式に問題があるので修正してます)

アバター
Justy
副管理人
記事: 122
登録日時: 15年前

Re: あれ、存在理由が・・・

投稿記事 by Justy » 14年前

 Cだとマクロの中でも使いますよ。


#define HogeHoge() \
do{ \
...; \
...; \
} while(0)

みたいな。


 do-whileを使わないというのは多分その先生の流儀じゃないですかね。

アバター
クローバ
記事: 12
登録日時: 15年前
住所: 東京23区内

Re: あれ、存在理由が・・・

投稿記事 by クローバ » 14年前

取りあえず、コメントがイッパイで驚きと。
mixiとは違ってこのSNSに登録して良かったなと。

>>パコネコさん
ゲームとかでは良いのかもしれないのですが、組込み分野では人の命に関わる事があるとか何だとかで。
駄目らしいのです。
一応、便利だから存在はしているのかな?
とも思えました。

>>ナムアニクラウドさん
綺麗さよりも、安全性を求めないとと言う事もありますので。
そういった面での事なので、今回は見やすさや簡単さは安全性の次ぎと言う事のようです。

>>御津凪さん
そうなんですよね。
コンパイラよりけりなんですよね。
車関係のだと、他にもインデントが可笑しいだけでもエラー吐くのもあるそうで。
色々と組込み系は制限があるようですね。

>>Justyさん
これに関しては、使う使わないではなくて。
使って良いか駄目かと言う事らしく。
組込み系では、人の命に関わりかねないと言う事もあって、先生の流儀ではなく企業でも使わないとの事です。

------------------------------------
先生いわく、君達の今書いている程度の短いコードならば使っても支障はなく逆に簡単だけれども。
今後の授業や企業では間に数百行(うろ覚え)と入る事もあり、そうなった場合でのバグが考えられ。
そのバグが人名に関わる巨大なバグになりかねないから使用はされないと。
それどころか、コンパイラに弾かれると思うよ。

との事。
結局は、組込み系の学科だからなのかなと。
普通に使えたらやはり便利ですもんね。
皆さんコメント有難うございました。