Как выйти из цикла do-while, даже если разрыв объявлен в операторе if?

#c

Вопрос:

Как выйти из цикла do-while, даже если разрыв объявлен в операторе if?

 struct node * sort(struct node * head, int data) {
  struct node * newp = (struct node * ) malloc(sizeof(struct node));
  newp -> data = data;
  newp -> link = NULL;
  int key = data;
  struct node * temp = head;
  if (head == NULL || key < temp -> data) {
    newp -> link = temp;
    head = newp;
    return head;
  } else {
    do {
      if (temp -> link -> data > key) {
        //I have declared break here but according to the rule inner loop 
        // must break why the do while loop is also exiting.
        break;
      }
      temp = temp -> link;
    } while (temp -> link != NULL);
    newp -> link = temp -> link;
    temp -> link = newp;

    return head;
  }

}
 

Комментарии:

1. Ваш вопрос не совсем ясен, о чем вы спрашиваете. Вы пытаетесь понять, почему break оператор выходит из вашего do/while цикла? Ваш вопрос, похоже, касается вложенного цикла, но в вашей программе есть только 1 цикл.

2. if операторы не являются циклами. while , do while и for есть. Излишне говорить, что у вас там нет внутренних петель.

3. Вы говорите о внутренних циклах, но я не вижу вложенных циклов (единственный цикл-это do...while цикл и break выходы из него). if не считается петлей и, следовательно break , не будет «вырываться» из нее.

4. если break бы только вырваться if , условный разрыв был бы невозможен.

Ответ №1:

if Оператор — это не цикл. Операторы цикла, называемые операторами итерации в стандарте C, являются while do операторами, for , и.

A break выходит из самого внутреннего switch , while , do , или for содержащего его утверждения. ( switch Оператор не является оператором итерации, но break завершит его.)