
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
>while文と無限ループの違い
そもそも、両者の定義はまったく違います。
while文はC言語などでループ(繰り返し)処理を実現するための
予約語であって、無限ループとはアルゴリズム上(実装上)での
while文の書き方の一つでしかありません。
>while文の偽と判定する部分がif文で真と判定するだけで、同じような気がする
そのとおりです、上記で書いたように書き方の一つでしかありません。
この場合、繰り返し処理を終わる可能性があるものは無限ループとは
呼びません。
無限ループというのは単に実装上で繰り返し処理の
終わり(繰り返し処理を抜ける機会)が無いループの事を
言っているに過ぎません。
int flag = 0;
while( flag==0 ){
flag++;
}
と書こうが
int flag = 0;
while(1){
if( flag!=0){
break;
}
flag++;
}
と書こうが両者は無限ループではありません。
(厳密には多少違いますが、処理的な差異はありません)
無限ループとは以下の場合があります。
(例外やフックなどはここでは考慮しないものとします)
//flagが繰り返し処理中に変化しない場合
int flag = 0;
while( flag==0 ){
}
//変化しても抜ける機会が無い場合
int flag = 0;
while(1){
if( flag!=0){
}
flag++;
}
//一番分かりやすい無限ループ
while(1){
}
などです。
ちなみにfor文では
for(;;){
}
などと書いたりします。
No.7
- 回答日時:
(1)
a = 0;
while ( a == 0 ) {
}
(2)
a = 0;
b = 0;
c = 0;
while ( 1 ) {
if ( a != 0 ) break;
if ( b == 1 ) break;
if ( (c != 0) && ( c == b ) break;
}
処理を抜ける条件が複数あって、1つの条件式にする事が
できない。又は、ループの途中で処理を終了させたい様な
時に、(2)の様な使い方をします。
また
(3)
void aa() {
if ( a != 0 ) return;
if ( b == 1 ) return;
if ( (c != 0) && ( c == b ) return;
}
の様に複数箇所でモジュールから抜ける処理が有ると
デバッグ時に、ブレークポイントを複数設定しないと
いけませんし、設定に洩れがあると終了時の変数の値
を確認できないまま処理から抜けてしまうので(4)の
様にする場合が有ります。
(4)
void aa() {
do {
if ( a != 0 ) break;
if ( b == 1 ) break;
if ( (c != 0) && ( c == b ) break;
} while (0);
}
この様にするとデバッグ時にも最後の行に1箇所
ブレークポイントを入れておけば、モジュール終了
時の変数値の確認ができますし、大規模システムの
場合に行われるログ出力処理も1箇所で済ませる事
ができます。
No.6
- 回答日時:
基本的には同じですが、使い方が違います。
簡単に書きます。
通常のwhile文の場合。
int i = 0;
while (i < 10) {
処理A;
処理B;
処理C;
i++;
}
この場合は、処理A、処理B、処理Cをそれぞれ10回処理を行ったら、処理が終了します。
一方、無限ループと言われているやり方^^。
(実際は無限ループとは言いません。)
以下のようにコーディングします。
int i = 0;
while (1) {
処理A;
処理B;
if (i < 10){
処理C;
break;
}
i++;
}
処理A、処理Bをそれぞれ10回処理して、処理Cのみ9回しか処理を行わない場合に、このように記述します。
どうですか?
処理結果が違ってきますよね。
プログラミングをする場合は、言語だけではなく、どのような処理をプログラミングするのかを考えれば、理解できると思います。
このような、回答が欲しかったのでしょうか?
因みに、無限ループは、永遠に処理が終わらない事です。
頑張って勉強してくださいね^^。
No.5
- 回答日時:
while (true) {
if ( !expression ) break;
do_something();
}
と
while (expression) {
do_something();
}
が同じではないか?ということで良いですか?
コンパイラから見れば同じかもしれませんが、プログラマから見ればコードの見やすさ、保守性などが違います。
# ANo.3 の人とダブッた。
No.4
- 回答日時:
基本的には、while( 真 ){}としているだけですから、同じものです。
違いといえば、使い方の差ですかね。
条件によって、途中で処理を中断させたい場合とか、条件によって異なる処理をさせた後でループを抜けたいとか。
もちろんwhileの中に基本的な条件をいれておいて、例外的にifで対応ということもできますが、ループを抜ける条件があちこちにかかれると、可読性が悪くなりますし。
どうすれば正しいというのはなくて、可読性やメンテナンスのしやすさといったいろいろな条件を加味して、どちらを使用するか決めることになります。
No.3
- 回答日時:
(1)
while ( 条件文 ) {
}
と
(2)
while ( 1 ) {
if ( 条件文 ) break;
}
との違いでしょうか。
ならば#1の方の言うとおり、条件を判断する箇所が違うだけで全く同じです。要するにプログラマの好きなように書けばいいのです。
(1)の書き方は一定の条件の場合、(2)の書き方は繰り返すごとに条件が変わる場合とかに経験上、分けられます(←あくまでも個人的な私見)。
No.2
- 回答日時:
質問の意味を完全にはよく把握していないので推察して回答します。
見当違いでしたらすみません。if文で抜ける場合には、抜ける判定がされたときに、if文の後からloopの終わりまでのプログラムが実行されずに抜けてしまうところが実用的に異なると思います。もしそのif文をloopの最初か最後に置いたら、whileを使ったloopと同じになると思います。
あと「無限ループ」という言葉ですが、判定するif文が入って無限には続かないものは、「無限ループ」とは言わないような気がします。私は実際にプログラムを強制終了でもさせない限り回り続けるループのことを「無限ループ」と呼ぶと思っていました。ただ世の中にはそう呼んでいる世界もあるかもしれないので、確実なことは知りません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 英語 Osteogenesis in group B and C were significantly l 2 2022/03/24 05:27
- 英語 接続詞Whileを主語、動詞無しで使えるのでしょうか? 参考書に次の文がありました。 We shou 3 2023/01/30 06:08
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- 英語 (前文)-turning up the volume on the bicycle trend wh 1 2023/02/08 15:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報