01/10/2018, 00:50

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!
");
         a = a + 1;
         goto VIETJACK;
      }
      printf("Gia tri cua a la: %d
", a);
      a++;
     
   }while( a < 15 );
   printf("
===========================
");
   printf("VietJack chuc cac ban hoc tot! 
");
 
   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 ạ

Mai Anh Dũng viết 02:54 ngày 01/10/2018

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.

Gió viết 03:01 ngày 01/10/2018

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.

Chau Phu Quang Huy viết 02:51 ngày 01/10/2018

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

Người bí ẩn viết 03:02 ngày 01/10/2018

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

Chau Phu Quang Huy viết 03:00 ngày 01/10/2018

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

Người bí ẩn viết 03:01 ngày 01/10/2018

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

Chau Phu Quang Huy viết 03:01 ngày 01/10/2018

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

Người bí ẩn viết 03:03 ngày 01/10/2018

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

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


Đùa đấy.

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

Ở đâ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

Chau Phu Quang Huy viết 02:59 ngày 01/10/2018

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

Người bí ẩn viết 03:03 ngày 01/10/2018

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

Bài liên quan
0