Hỏi về goto trong C
#include <stdio.h>
int main()
{
int i, j;
for ( i = 0; i < 10; i++ )
{
printf( "Outer loop executing. i = %d
", i );
for ( j = 0; j < 3; j++ )
{
printf(" Inner loop executing. j = %d
", j );
if ( i == 5 )
{
goto stop;
}
}
}
// This message does not print.
printf( "Loop exited. i = %d
", i );
stop:
printf( "Jumped to stop. i = %d
", i );
}
Kết quả
Outer loop executing. i = 0
Inner loop executing. j = 0
Inner loop executing. j = 1
Inner loop executing. j = 2
Outer loop executing. i = 1
Inner loop executing. j = 0
Inner loop executing. j = 1
Inner loop executing. j = 2
Outer loop executing. i = 2
Inner loop executing. j = 0
Inner loop executing. j = 1
Inner loop executing. j = 2
Outer loop executing. i = 3
Inner loop executing. j = 0
Inner loop executing. j = 1
Inner loop executing. j = 2
Outer loop executing. i = 4
Inner loop executing. j = 0
Inner loop executing. j = 1
Inner loop executing. j = 2
Outer loop executing. i = 5
Inner loop executing. j = 0
Jumped to stop. i = 5
Cho em hỏi lúc nó nó lặp đến 5 và chạy qua goto thì j chỉ in ra = 0 thôi ạ
Mình thấy có gì lạ đâu. Nhưng dù sao cũng không nên sử dụng
goto
.Lạ chứ goto là đúng đk nó sẽ chạy đến cái những lệnh mà khai náo trong goto mà sao j lại = 0 mà khải là 0 1 2 @@!
Khi
i = 5
và tiến vào InnerLoop,j
được khởi tạo lại:j = 0
, sau đó message thông báo InnerLoop được in ra và kiểm tra điều kiện củai
:i == 5
=>true
, điều kiện đúng, lệnhgoto
được thực hiện, nhảy ra ngoài vòng lặp -> vòng lặp kết thúc.Lệnh
goto
là lệnh nhảy không điều kiện, nó có điều kiện là do bạn đặt cho nó thôi. Còn cái mà nó nhảy tới là label