Thứ Ba, 9 tháng 4, 2024

18.Câu lệnh Goto

Trong chương trình đôi khi bạn muốn bỏ qua 1 số câu lệnh hoặc quay lại một số câu lệnh khi đó bạn có thể gán nhãn cho vị trí các câu lệnh và sử dụng câu lệnh goto để chương trình tiến hành thực hiện các câu lệnh bắt đầu từ vị trí nhãn.


Lưu ý: Việc sử dụng câu lệnh goto không được khuyến khích sử dụng trong bất kỳ ngôn ngữ lập trình nào vì nó rất khó để theo dõi luồng điều khiển của chương trình, làm cho chương trình khó hiểu và khó bảo trì. Bất kỳ chương trình nào sử dụng goto đều có thể được viết lại theo cách bình thường.

Cú pháp:

goto label;
..
.
label: các câu lệnh;

Chương trình tào lao của chúng ta đã hoành tráng đủ để bạn nhận ra việc sử dụng lệnh Goto sẽ  dễ khiến mọi thứ khó hiểu thế nào. Chúng ta sẽ thử với chương trình tào lao. Ta sẽ dùng biến int so;

Thêm các lệnh sau vào chương trình.

if(so % 2 == 0){
        goto label;
    }
    printf("Xin Chao\n");
    printf("Day la chuong trinh khong nhay toi label\n");
    label:
    printf("Dat Viet Lap Trinh\n");
    printf("Lap Trinh C\n");

Bấm Run để chạy thử, mọi thứ trôi chảy, không có vấn đề gì.




Chương trình của chúng ta sẽ thế này

/* Đây là chương trình tào lao */

#include <stdio.h>

#include <math.h>

int main()
{

    int so = 2024; // Đây là biến số

    char namtoi[] = "Năm 2025";  // Đây là biến chuỗi

    float a = 8.3462326543;
    double b = 10.8745634535333;

    int n;

    char Ten;

 
   
int soTien;

    int soNam;

    int  tongSoTien;

    int x = 15 < 25 ? 100 : 200;
    
    int diBien1= (10 < 20) && (20 >= 20);
    int diBien2= (10 > 20) || (20 < 10); 

    so +=10;

    long long so2 = so;

   float so3 = 35.82;
   int so4 = (int)so3 + 1;
   int so5 = 2, so6 = 10;

 
    printf("Xin Chào ! \n");
    printf("Rất vui gặp bạn!");
    printf("Năm nay là %d \n", so);
    printf("Năm tới là %s", namtoi);

    printf("In 4 chữ số sau dấu phẩy : %.4f\n", a);
    printf("In 5 chữ số sau dấu phẩy : %.5lf\n", b);
    printf("Hãy nhập một số từ 1-100:  ");

    scanf("%d", &n);

    printf("Gía trị của n là : %d\n", n);

    printf("Nhap tên của bạn, chỉ một chữ A,B,C : ");

     scanf(" %c", &Ten);
    printf("Tên bạn là : %c\n", Ten);

     printf("Hãy nhập số tiền gửi hàng tháng:  ");
    scanf("%d", &soTien);

    printf("Hãy nhập tổng số năm đã tiết kiệm:  ");
    scanf("%d", &soNam);

   tongSoTien = (soTien * 12) * soNam;
    
    printf("Xin chào: %c, sau %d nam kien tri tich luy, ban da kiem đươc %d .Xin chuc mung ban!", Ten, soNam, tongSoTien); 

   printf("%d\n", x);
    printf("%d, %d\n", diBien1,diBien2);

    printf("%d ", 100 > 50);
    printf("%d ", 20 <= 30);
    printf("%d ", 80 >= 100);

   printf("Gia tri cua bien so2 là %lld \n", so2);

   printf("Gia trị so4 là %d \n", so4);

   printf("%d ", (int)pow(so5, so6));
   printf("Gia trị so3 ceil là %f \n", ceil(so3));
   printf("Gia trị so3 floor là %f \n", floor(so3));

      if (so % 2 == 0) {
            printf("Bien so la so chan.");
        } else {
        printf("Bien so la so le.");

    }

    if (soTien < 0 || soTien >= 1000000) {
        printf("Ban nen nhap so tu 1 den 1000000");
    } else if (soTien > 0 && soTien < 700000) {
        printf("Ban gui ít qua");
    } else if (soTien >= 700000 && soTien < 800000) {
        printf("Ban gui o muc trung binh");
    } else if (soTien >= 800000 && soTien < 900000) {
        printf("Ban gui tương doi nhieu");
    } else if (soTien >= 900000 && soTien <= 1000000) {
        printf("Ban gui nhieu qua!");
    }

    switch(so5){
        case 1:
            printf("MOT\n");
            break;
        case 2:
            printf("HAI\n");
            break;
        case 3:
            printf("BA\n");
            break;
        case 4:
            printf("BON\n");
            break;
        //Neu n khong phai la 1, 2, 3, 4
        default:
            printf("MACDINH\n");
    }

    if(so % 2 == 0){
        goto label;
    }
    printf("Xin Chao\n");
    printf("Day la chuong trinh khong nhay toi label\n");
    label:
    printf("Dat Viet Lap Trinh\n");
    printf("Lap Trinh C\n");


    return 0;
}

Giải thích : Khi câu lệnh goto label; được thực hiện thì chương trình lập tức chạy tới các câu lệnh bên dưới nhãn label để thực hiện mà bỏ qua 2 câu lệnh ở dòng "Xin chao" và dòng tiếp theo. Trong trường hợp nếu câu lệnh goto label; không được thực hiện thì chương trình sẽ thực hiện câu lệnh dòng "Xin chao" và dòng tiếp theo rồi mới tới các câu lệnh bên dưới của nhãn label.

 

Phần tiếp theo

Phần trước
 

 

Không có nhận xét nào:

Đăng nhận xét