Hỏi về lệnh do while goto

#include <stdio.h>
 
int main ()
{
   /* phan dinh nghia bien cuc bo  */
   int a = 5;

   /* vong lap do...while */
   VIETJACK:
   do {
      if( a == 10)
      {
         /* nhay qua buoc lap nay */
         printf("Nhay qua buoc lap nay!\n");
         a = a + 1;
         goto VIETJACK;
      }
      printf("Gia tri cua a la: %d\n", a);
      a++;
     
   }while( a < 15 );
   printf("\n===========================\n");
   printf("VietJack chuc cac ban hoc tot! \n");
 
   return 0;
}

Em coi trên vietjack thấy code nó như vậy nhưng em bỏ thử cái a = a + 1 đi thì nó xuất cái printf của trong if liên tục trong khi đó mình đã có a++ rồi vậy a = a + 1 là sao nữa ạ

Code của em sẽ chạy như thế này.

Cứ tới chỗ goto thì nó sẽ nhảy lên cái label ở phía trên.
Khi em bỏ a = a + 1 đi thì khi a bằng 10 nó sẽ giữ nguyên giá trị 10, dẫn đến nó sẽ lặp vô tận.

3 Likes

Từ 1->9 điều kiện if sai nên nó bỏ qua vòng lặp vẫn bình thường
a=10 lệnh if được thưc hiện a=a+1 thì a=11. nó in “Nhay qua bước lap nay” và bắt đầu lại vòng while
11->14 vòng lặp được tiếp tục thực hiện bình thường.

2 Likes

Thank anh Đạt ạ vậy cái a++ ở dưới là sao vay anh

Là tăng a lên 1 đơn vị đó bạn. a++ sẽ tương đương với a = a + 1

2 Likes

K anh ơi nó còn cái a++; ngoài hàm if á

Thì là a = a + 1 đó. a++ giống với a = a + 1 nhé, chỉ khác về cách ghi

1 Like

K anh ơi
VIETJACK:
do {
if( a == 10)
{
/* nhay qua buoc lap nay */
printf(“Nhay qua buoc lap nay!\n”);
a = a + 1;
goto VIETJACK;
}
printf(“Gia tri cua a la: %d\n”, a);
a++;
Cái a++; đó anh sao phải thêm sau printf cuối cùng nữa vậy ở trên nó đã có rồi :frowning:

mình THÍCH thì mình làm thôi ~~


Đùa đấy.

Ở đây, sau khi thực hiện câu lênh a = a + 1 thì nó sẽ goto lại cái đoạn code đó, bắt đầu từ label VIETJACK, nên câu printf và a++ ở dưới sẽ không thực hiện.
Ngược lại, nếu if không được thực hiện thì printf và a++ sẽ được thực hiện, nên phải có a++ để tăng a lên, không là lặp vô tận :slight_smile:

2 Likes

Thank bác em hiểu rồi cơ mà hơi rối

Debug đi. Debug là 1 cách hiểu code đấy

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?