Goto dan Label

Pada bahasa Assembly ataupun bahasa mesin, percabangan maupun perulangan adalah gabungan perbandingan(cmp / compare) dan lompatan bersyarat(jne, je, jg, jl, jge, jle) ke suatu bagian dari program. Jika lompatan dilakukan ke depan maka akan terjadi percabangan. Jika lompatan ke belakang maka akan terjadi perulangan. Lompatan bersyarat harus di awali dengan perbandingan untuk mendapatkan hasil yang diinginkan.

Selain lompatan bersyarat ada lompatan tanpa syarat ke suatu bagian pada program yaitu jmp (jump), jump biasanya merupakan lanjutan dan alternatif akhir dari suatu lompatan bersyarat. Dalam bahasa C atau C++ ada perintah yang sama dengan jmp yaitu "goto". "goto" adalah sebuah statement yang mengarahkan pada sebuah label. Nama Label diakhiri dengan ":". Di bawah ini adalah contoh penggunaan sederhananya.
#include <stdio.h>

int main(){
    goto labelku;
    printf("terlewati");
    labelku:
    printf("Ada bagian yang tidak ditampilkan?\n");
    return 0;
}
Kode program yang berikutnya berisi contoh penggunaan yang lebih rumit.
#include <stdio.h>

int main(){
int data[10];
char ulangi;
printf("Goto 1 : \n");

labelku:
    for(int i=1;i<=3;i++){
        printf("Data %d : ", i);
        scanf("%d", &data[i]);
    }

    for(int i=1;i<=3;i++)
        printf("%d ", data[i]);
    printf("\n");

salah:
    printf("Ulangi lagi (y/t): ");
    scanf("%c", &ulangi);
    if(ulangi=='y'){
        printf("lanjut!\n");
        goto labelku;
    }else if(ulangi=='t'){
        printf("selesai!\n");
    }else if(ulangi!='y'||ulangi!='t'){
        printf("Ketikkan y atau t!\n");
        goto salah;
    }

    return 0;
}