2014-10-09 2 views
1

Привет, так что в основном мой вопрос: что делает цикл for без каких-либо фигурных скобок вокруг него? Поэтому из того, что я знаю, что во время if-оператора выполняется только первая строка кода. Итак, в цикле for, как это работает? Я не совсем понимаю концепцию цикла без фигурных скобок и фигурных скобок. Думаю, объяснение с помощью кода поможет. Кстати, это в C. Вот код, который я рассматривал как ссылку.Что делает цикл for без фигурных скобок?

int main(int argc, char* argv[]) 
{ 
    int i; 
    int count = 0; 
    for (i = 0; i < 5; i++) 
    count++; 
    printf("The value of count is: %d\n", count); 

    return 0; 
} 

В этом случае, я вижу, что нет фигурных скобок, поэтому я предполагаю, что это будет просто держать итерацию первого заявления, пока я < 5 и один раз я не меньше, чем 5 она не делает ничего, но когда я проверил код, я понял, что он также заканчивает печать инструкции printf. Я думал, что цикл без фигурных скобок выполняет только первую строку кода? Или я здесь что-то не хватает.

+0

Я знаю, что есть дубликат этого, просто не могу найти его ... – jpw

+2

Что происходит, когда вы его компилируете и запускаете? Что произойдет, если вы затем добавите открытую фигурную скобку после 'for' и закрытия после' printf'? Кажется, что около 30 секунд усилий ответят на это за вас, и это будет намного быстрее (и более образовательным), чем публикация здесь и ждет ответа. В этом коде нет ничего опасного, что мешает вам немного приложить усилия. –

+1

@jpw Я уже пробовал поиск до того, как задал вопрос, но не смог найти ничего похожего на то, что я пытался задать – Tenza

ответ

3

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

Обратите внимание, что в вашем примере printf вызывается только один раз. Хотя его отступ соответствует предыдущей строке, это красная селедка - C не заботится. То, что он говорит мне, заключается в том, что тот, кто написал код, вероятно, забыл скобки, и предназначался для, чтобы быть частью тела цикла.

Единственный раз, когда я оставил бы из фигурных скобок при написании однострочного if заявления:

if (condition) statement; 
do_something_else(); 

Здесь нет никакого отступа вводить двусмысленности о том, действительно ли предполагается утверждение на вторую линии чтобы принадлежать телу if. Вы, вероятно, будете более уверены, читая это, что он работает по назначению.

+1

Так что все остальное было бы рассмотрено вне тела, как сказал @gmarintes? А также это применимо для всех циклов, а также if-statements? – Tenza

+0

Да, оно применяется в целом к ​​циклам и условным операторам. В Google много дискуссий; [здесь] (http://bytes.com/topic/c/answers/129149-braces-needed) приличный. – Air

+0

Обратите внимание, что однострочное 'do ... while' неудобно, так как оно требует точки с запятой после оператора body и условия. – Air

2

Если for-loop не имеет фигурных скобок, он выполнит следующее утверждение. Синтаксис по существу

for (<initialization>;<condition>;<increment>) <statement>; 

Часть «заявление» может быть что угодно. Это может быть простой граф ++; или это может быть оператор if if/else if, иначе он может быть еще одним циклом без привязок!

Так что в этом случае код аналогичен:

for (i = 0; i < 5; i++) { 
    count++; 
} 
printf("The value of count is: %d\n", count); 
+0

Я не уверен, что понимаю, что вы подразумеваете под этим, будет выполнять инструкции до следующего ';'? Так это похоже на то, что если в первой строке цикла будет существовать условие, оно будет продолжаться через него до тех пор, пока оно не завершится, а затем, наконец, не пройдет через остальные строки? – Tenza

+0

Да.Синтаксис в основном для (; ; ) ; Часть может быть любой. Если может быть простой граф ++; или это может быть оператор if if/else if, иначе он может быть еще одним циклом без привязок! – gmarintes

+0

Хорошо, спасибо вам за помощь, которая очистила меня! – Tenza

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