2011-01-09 16 views
2

同じ目的でforループとwhileループを使用できます。 では、whileの代わりにforを使用すると、そのコードに影響しますか? if-elseとswitch-caseの間で同じ質問が発生しますか?何を使うべきかを決める方法? たとえば、どちらをお好みですか?whileループでforループを使用するタイミングは?

このコード:

int main() 
{ 
    int n = 10; 

    for(int i=0;i<n;i++) 
    { 
     do_something(); 
    } 
    return 0; 
} 

またはこのコード:

int main() 
{ 
    int n=10,i=0; 

    while(i<n) 
    { 
      do_something(); 
      i++; 
    } 
    return 0; 
} 

forまたはwhileループ使用すると、任意の手段によって、コードに影響を与えていない場合、私は2を作るために必要だった何を知っているかもしれません同じ問題の解決策?

+1

Cに「cin」がないのでCタグを削除しました。 – Puppy

+0

http://stackoverflow.com/questions/2950931/for-vs-while-in-c-programming – Lucas

+1

タイトルを少し変更してこの質問がC/C++プログラマのベース全体に及ぶことは確かです。 – SiegeX

答えて

10

ループをあらかじめ実行する必要がある反復回数を知っていれば、私はfor構成を推奨します。 Whileループは、ループの終了条件がまだ決定されていない時間に発生したときに適しています。しかしながら

for (int i = 0; i < 10; ++i) {...}

時々我々は、より複雑なロジックまたはフロー制御を必要とする:ループのロジックは、単一の行に含まれているので

+0

+1私は同意します。 ;)..char lim .. – BlackBear

13

コードの意図を明確にするために、どちらを使用してもかまいません。

0

これは決してプログラムの動作に影響しません。それは理解しやすいということの問題です。

switch(i)  // Once finding your case, you can easily know where the switch ends 
       // and thus the next statement of execution 
{ 
    case 1: break ; 
    case 2: break ; 
    // ..... 
    case 10: break ; 
    default:break ; 
} 

if(i==1) // Here you have the pain of finding where the last else if ends ! 
{} 
else if(i==2) 
{} 
// ... 
else if(i==10) 
{} 

しかし、それは味の問題です。私はswitchが好きです。

+0

とif-elseとswitch caseについてはどうすればいいですか? – Atul

+0

@Atulすべての人が示唆しているように、読みやすさと理解の容易さの問題です。 – Mahesh

+1

@Atul:おそらくスイッチは、同時に多くの条件をテストする必要があるときに優れています。 – BlackBear

2

一般に、forループは、単純なループに好ましいかもしれません。 A whileループにより、より複雑なループを実装することができます。例えば、我々は特定の条件下でのみ、カウンタ変数をインクリメントするとします。

int i = 0; 
while (i < 10) 
{ 
    if (some_condition) ++i; 
    else if (some_other_condition) { ... } 
    else break; 
} 
+0

この引数は表示されません。最初の2行を 'for(int i = 0; i <10;)'に置き換えれば、同じループになります。 (そして、 'i'ならばスコープを制限するというボーナスがあります)。 –

+0

@Billy ONeal、true - それに続いて、while(条件)は、for(; condition;)で置き換えることができるので、whileを完全に余計であると結論付けることができます。それは主観的ですが、カウンタ変数が条件付きで更新されると、 'while'はより明確な選択肢になるかもしれないと思います。通常、コードを読む誰かが典型的な' for'ループに(非条件付き) –

1

あなたはwhile(int i=0, i < n)を書き込むことはできません。つまり、whileループの前にiを定義する必要があります。 iは、ループの内側と外側の両方に存在します。

しかし、forループの場合は、forループ自体にiを定義することができます。ループの外側にはiが存在しません。それは1つの違いです。この違いのために、forwhile以上です。めちゃくちゃforするとwhileを使うことはまれです!

1

コードを読みやすく論理的にするものを使用してください。

コンパイラ(少なくともgcc)は、同じことをするforループよりもわずかに優れた最適化を行うことができます。最適化がほんのわずかのクロックサイクルであることを正しく覚えていれば、性能に顕著な影響はないでしょう。

1

いくつかの非常に微妙な違いがあります。

  • 例えばループ変数(S)、の範囲は、forループiが、これは前に定義する必要があります(それは後に使用可能であることを意味している、もちろん、あなたがしていることを行うことができますwhileと、ローカルスコープを持っているとforにも...)
  • continueforループで、変数はwhileと、減算/インクリメントされ、あなたがする必要がある場合は、率直に言ってcontinue

前に、操作を挿入する必要があると思います増分/減分、forループが意味を成します。境界がわからず、実際の増減がない場合は、whileループが意味があります。

while(some_stream >> input) 
{ 
    // do stuff... 
} 
+1

スコープの問題は、C++ ... –

+2

..........とC99にのみ当てはまります。 –

4

ループはforです。どうして? forループを見ると、ループ・ブーキングのすべてが1つのステートメントで保持されると期待できます。ループの動作の仕方を気にすることなく、breakまたはcontinueステートメントを挿入できます。そして最も重要なのは、ループの本体は、ループ自体を維持するのではなく、ループが実際にしたいことに焦点を当てています。 whileが表示されたら、ループが使用する繰り返しパターンを理解するには、ループ本体全体を見て理解する必要があります。

私はwhileを使用して終了唯一の場所は、ループの制御は、いくつかの外部のルーチンによって提供されたものは数例のためである(すなわちFindFirstFileW

それはしかし個人的な意見のすべての問題です。多くの人々は、ループステートメントが複数の行にまたがることが多いので、私がforループでやっていることを気に入らない。

関連する問題