2011-01-09 4 views
2

Мы можем использовать для цикла и while для той же цели. , что означает, что они влияют на наш код, если я использую вместо него? такой же вопрос возникает между if-else и switch-case? как решить, что использовать? например, какой из них вы предпочитаете?Когда использовать цикл for в цикле while?

Этот код:

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; 
} 

при использовании для или во время цикла не влияет на код любым способом, то могу ли я знать, что было необходимо сделать 2 решение для той же проблемы?

+1

Убрано C-тег, поскольку в C C. '' cin' нет C. – Puppy

+0

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

+1

Я слегка изменил название и поставил [c] отмените ответ после удаления 'cin', поскольку этот вопрос, конечно, охватывает всю базу программистов на C/C++. – SiegeX

ответ

10

Если вы знаете количество итераций, цикл должен запускаться заранее, я бы рекомендовал конструкцию for. Хотя циклы хороши, когда условие завершения цикла происходит в какое-то еще не определенное время.

+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 и корпуса переключателя – Atul

+0

@Atul Как каждый предложил, что это вопрос удобочитаемости и легкости в понимании. – Mahesh

+1

@ Атул: возможно, переключатель лучше, когда вам нужно одновременно проверять множество условий. – BlackBear

2

В общем, for цикл может быть предпочтительным для простых петель, так как логика цикла содержится в одной строке:

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

Однако, иногда нам нужно более сложную логику или управление потоком , Цикл while позволяет нам реализовать более сложные циклы. Например, предположим, что мы хотим, чтобы увеличить переменную счетчика при определенных условиях:

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

Я не вижу этого аргумента. Просто замените первые две строки на 'for (int i = 0; i <10;)', и у вас есть тот же цикл. (И иметь бонус ограничения области, если 'i'). –

+0

@Billy ONeal, true - но после этого до конца мы можем заключить, что 'while' совершенно лишнее, так как любое' while (condition) 'может быть заменено на' for (; condition;) '. Это субъективно, но я думаю, что 'while' может быть более четким выбором, если переменная счетчика обновляется условно, так как кто-то, читающий код, обычно ожидает, что типичный цикл' for' должен включать (не условное) обновление счетной переменной. –

1

Вы не можете написать while(int i=0, i < n); то есть вы должны определить i перед циклом while; означает, что i существует как внутри, так и снаружи цикла.

Однако в случае цикла for вы можете определить i прямо в самой петле for; и поэтому i не существует вне цикла. Это одно отличие. Просто из-за этой разницы мне нравится for больше, чем while. И используйте while редко, когда for делает вещь более громоздкой!

1

Просто используйте тот, который делает код читаемым и логичным.

В некоторых случаях компилятор (по крайней мере, gcc) сможет оптимизировать очень немного лучше, чем цикл for делает то же самое. Если я правильно помню, что оптимизация - это всего лишь несколько тактов, поэтому она, вероятно, никогда не окажет заметного влияния на производительность.

1

Есть некоторые очень тонкие отличия.

  • объем переменной цикла (ов), например, с контуром fori имеет локальную область видимости, с while это должно быть определено до того (что означает, что она доступна после того, как, конечно, вы можете сделать это с for а ..)
  • continue с for цикла, переменная будет увеличиваться/уменьшаться с while, вы должны ввести в эксплуатацию до continue

Честно говоря, если вам нужно increment/decment, цикл for имеет смысл, если вы не знаете границ и нет реального приращения/уменьшения, цикл while имеет больше смысла, например.

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

Проблема области применима только для C++ ... –

+2

.......... и C99. –

4

Я стараюсь предпочитать петлю for. Зачем? Потому что, когда я вижу цикл for, я могу ожидать, что вся бухгалтерия цикла будет храниться в одном выражении. Я могу вставить break или continue заявления, не беспокоясь о нарушении работы цикла. И самое главное, тело цикла фокусируется на том, что вы на самом деле хотите, чтобы цикл выполнял, а не поддерживал сам цикл. Если я вижу while, тогда я должен посмотреть и понять весь цикл цикла, прежде чем я смогу понять, какой шаблон итерации использует цикл.

Единственное место, где я в конечном итоге с помощью while для тех немногих случаев, когда контроль цикла обеспечивается с помощью какой-либо внешней подпрограммы (т.е. FindFirstFileW)

Это все вопрос личного мнения, хотя. Многим людям не нравится то, что я делаю с циклами for, потому что оператор цикла часто заканчивается несколькими линиями.

Смежные вопросы