STARTING
CONTROL STATEMENT
FUNCTION
ARRAY & POINTER
OOP
STL
ITERATORS
OTHER FEATURES
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Lệnh goto trong C++ (Nhảy tới một đoạn code trong C++)

Trong bài này chúng ta sẽ tìm hiểu lệnh goto trong C++, đây là lệnh dùng để nhảy đến một đoạn code nào đó, nó cũng có thể được dùng để tạo một vòng lặp trong C++.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trước tiên hãy cùng mình tìm hiểu công dụng của lệnh goto C++ trước đã nhé, sau đó ta sẽ làm một vài ví dụ để giúp bạn dễ hiểu hơn.

1. Lệnh goto trong C++

Câu lệnh goto trong C++ còn được gọi là câu lệnh nhảy. Lệnh goto được sử dụng để chuyển điều khiển sang phần khác của chương trình. Lệnh goto trong C++ nhảy đến nhãn được chỉ định.

Ví dụ như chương trình đang chạy đến ở dòng 300, chương trình gặp lệnh goto A (A là nhãn), nó sẽ nhãy lến dòng có nhãn là A và thực thi đoạn code ở đó.

Bài viết này được đăng tại [free tuts .net]

Cú pháp

Cú pháp của lệnh goto trong C++ như sau:

Cú pháp
goto label;
.
.
.
label: statement;

Hoặc

Cú pháp
label: statement;
.
.
.
goto label;

Trong đó:

  • label: là nhãn do người lập trình định nghĩa, khi gặp lệnh goto label chương trình sẽ điều khiển đến label đó và thực thi đoạn code đó
  • statement: là các câu lệnh sẽ được thực thi

Khi gặp lệnh goto thì trình biên dịch sẽ di chuyển đến vị trí của label, đương nhiên lúc này trạng thái của các biến vẫn được giữ nguyên các thay đổi.

Ví dụ: Viết chương trình yêu cầu người dùng nhập vào một số chẵn, nếu người dùng nhập vào số lẻ thì tiếp tục yêu cầu nhập lại.

#include <iostream>
using namespace std;

int main()
{
    NhapDuLieu:
    int number;
    cout << "Nhap so can kiem tra: ";
    cin >> number;
	
    if (number % 2 == 0){
    	cout << "Nhap thanh cong!"<< endl;
    }
    else {
    	cout << " Vui long nhap lai ..." << endl;
    	goto NhapDuLieu;
    }
    
    return 1;
}

Chạy lên thì kết quả như sau:

goto JPG

Lưu đồ hoạt động

Lưu đồ hoạt động của lệnh goto trong C++ như sau:

goto flow JPG

2. Ví dụ lệnh goto trong C++

Sau đây mình sẽ lấy một ví dụ đơn giản có sử dụng lệnh goto trong C++ đó là yêu cầu người dùng nhập một tuổi hợp lệ. (Tuổi hợp lệ là tuối phải lớn hơn 0)

Ví dụ
#include <iostream>  
using namespace std;  
int main()  
{  
    TuoiHopLe:    
        cout << "Nhap lai tuoi cua ban: " << endl;    
    cout << "Tuoi ban la: ";    
    int tuoi;  
    cin >> tuoi;  
    if (tuoi < 1){    
        goto TuoiHopLe;    
    }    
    else    
    {    
        cout << "Ban da nhap tuoi hop le" << endl;     
    }         
}

Và kết quả sau khi chạy và thực hiện đoạn code trên như sau:

goto ex JPG

Mình xin giải thích luồng chạy của chương trình trên như sau:

Nếu một chương trình bình thường sẽ chạy theo thứ tự từ dòng 1 đến dòng cuối cùng và kết thúc chương trình. Chương trình không thể nào quay lại dòng trước để thực thi một lần nữa. Nhưng đối với chương trình có sử dụng goto thì cho phép chương trình quay lại dòng trước để thực thi tiếp.

Quay lại ví dụ trên, chương trình gọi tới hàm main sẽ chạy từ dòng 1, 2, 3, 4, 5, đến dòng 6 kiểm tra điều kiện nếu đúng thì chạy đến dòng 7, ở dòng 7 này có lệnh goto có nhãn là TuoiHopLe, chương trình sẽ tìm dòng có nhãn là TuoiHopLe để chạy, ở ví dụ trên nhãn TuoiHopLe ở dòng 1 vì vậy chương trình quay lại dòng 1 để chạy rồi tiếp tục dòng 2, 3, 4, 5, đến dòng 6 lại kiếm tra điều kiện nếu đúng thì đến dòng 7 và tiếp tục trở về dòng 1, nếu điều kiện sai thì chạy xuống dòng 8 và kết thúc chương trình.

Tuy nhiên các bạn nên hạn chế sử dụng lệnh goto trong chương trình của mình. Chỉ nên sử dụng lệnh goto trong một số trường hợp đặc biệt bắt buộc phải sử dụng mà thôi.

Lý do mà mình khuyên các bạn hạn chế sử dụng lệnh goto trong chương trình của mình là vì những điểm bất lợi của lệnh goto trong C++ như sau:

  • nó làm cho logic chương trình rất phức tạp
  • sử dụng lệnh goto rất khó để bảo trì, sử dụng nhiều lệnh goto trong một chương trình là một cơn ác mộng đối với người chịu trách nhiệm bào trì chương trình.
  • có thể sử dụng các câu lệnh break và continue để tránh sử dụng lệnh goto
  • chương trình rất dể bị vô vòng lặp vô hạn

Mình có thể giải quyết ví dụ trên bằng vòng lặp do while và lệnh break trong C++ mà không cần dùng đến lệnh goto như sau:

Ví dụ
#include <iostream>  
using namespace std;  
int main()  
{  
    int tuoi;
    do {
        cout << "Nhap lai tuoi cua ban: " << endl; 
        cout << "Tuoi ban la: ";   
        cin >> tuoi;
        if (tuoi < 1){
            
        }    
        else    
        {    
            cout << "Ban da nhap tuoi hop le" << endl;   
            break;
        }
    } while(tuoi < 1);
}

3. Kết luận

Như vậy là chúng ta đã tìm hiểu xong lệnh goto trong C++ là gì rồi. Trong bài học này các bạn chỉ cần biết cách sử dụng của lệnh goto là như thế nào thôi, mình không khuyến khích các bạn sử dụng lệnh goto để giải quyết vấn đề nhé, chỉ thật sự sử dụng lệnh goto trong một số trường hợp đặc biệt bắt buộc phải sử dụng lênh goto thôi nhé. Mà trường hợp đặc biệt đó là gì thì mình cũng chưa biết vì đó giờ mình cũng chưa từng sử dụng lệnh goto trong chương trình của mình. :)

Như vậy mình sẽ kết thúc bài học này ở đây nhé. Cám ơn các bạn đã đọc bài viết.

Cùng chuyên mục:

Kiểm tra chuỗi có phải là chuỗi pangram hay không trong C

Kiểm tra chuỗi có phải là chuỗi pangram hay không trong C

Loại bỏ các từ trùng lặp trong một chuỗi trong C

Loại bỏ các từ trùng lặp trong một chuỗi trong C

Chuyển đổi một số thành chuỗi số tiếng Anh trong C

Chuyển đổi một số thành chuỗi số tiếng Anh trong C

Tìm chuỗi con dài nhất không chứa ký tự trùng lặp trong C

Tìm chuỗi con dài nhất không chứa ký tự trùng lặp trong C

Chuyển đổi số nguyên sang dạng chuỗi và ngược lại trong C

Chuyển đổi số nguyên sang dạng chuỗi và ngược lại trong C

Kiểm tra số nguyên tố và số hoàn hảo trong C

Kiểm tra số nguyên tố và số hoàn hảo trong C

Tính lũy thừa của một số nguyên trong C

Tính lũy thừa của một số nguyên trong C

Tính phần dư của phép chia hai số nguyên trong C

Tính phần dư của phép chia hai số nguyên trong C

Tính tổng, hiệu, tích, thương của hai số nguyên trong C

Tính tổng, hiệu, tích, thương của hai số nguyên trong C

Sử dụng con trỏ để tính tổng các phần tử trong mảng trong C

Sử dụng con trỏ để tính tổng các phần tử trong mảng trong C

Sử dụng con trỏ để đảo ngược một chuỗi trong C

Sử dụng con trỏ để đảo ngược một chuỗi trong C

Sắp xếp một mảng số nguyên sao cho số lẻ nằm trước số chẵn trong C

Sắp xếp một mảng số nguyên sao cho số lẻ nằm trước số chẵn trong C

Sắp xếp một mảng chuỗi theo thứ tự từ điển trong C

Sắp xếp một mảng chuỗi theo thứ tự từ điển trong C

Sắp xếp một mảng số nguyên theo thứ tự tăng dần hoặc giảm dần trong C

Sắp xếp một mảng số nguyên theo thứ tự tăng dần hoặc giảm dần trong C

Tìm phần tử lớn thứ k trong mảng trong C

Tìm phần tử lớn thứ k trong mảng trong C

Xóa phần tử trùng lặp trong mảng trong C

Xóa phần tử trùng lặp trong mảng trong C

Đảo ngược mảng không sử dụng mảng phụ trong C

Đảo ngược mảng không sử dụng mảng phụ trong C

Tìm số lần xuất hiện của một phần tử trong mảng trong C

Tìm số lần xuất hiện của một phần tử trong mảng trong C

Tìm giá trị lớn nhất và nhỏ nhất trong một mảng trong C

Tìm giá trị lớn nhất và nhỏ nhất trong một mảng trong C

Tách chuỗi thành các từ riêng lẻ và in ra màn hình trong C

Tách chuỗi thành các từ riêng lẻ và in ra màn hình trong C

Top