01/10/2018, 08:15

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 ạ

rogp10 viết 10:21 ngày 01/10/2018

Mình thấy có gì lạ đâu. Nhưng dù sao cũng không nên sử dụng goto.

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

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 @@!

Khoa NTA viết 10:24 ngày 01/10/2018

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ủa i: i == 5 => true, điều kiện đúng, lệnh goto đượ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

Bài liên quan
0