Lệnh goto trong C / C++
Trong bài viết này, codehow sẽ giới thiệu đến các bạn lệnh goto trong C / C++. Giống như nghĩa của nó, "go to" có nghĩa là đi đến, vậy nó được sử dụng để đi đến một đoạn code nào đó do chúng ta chỉ định.
Với lệnh continue trong vòng lặp nó sẽ bỏ qua các câu lệnh bên dưới và thực hiện vòng lặp tiếp theo. Đối với goto nó sẽ bỏ qua các câu lệnh bên dưới và chuyển đến vị trí do ta chỉ định.
Vậy cú pháp của nó như thế nào? Cách triển trai lệnh goto trong C / C++ ra sao thì hãy cùng mình bắt đầu thôi nhé.
Cấu trúc lệnh goto trong C / C++
Ví dụ: chúng ta có một đoạn chương tình 100 dòng code. Và chương trình đang chạy đến dòng 50 thì gặp lệnh goto A (A là label do chúng ta đặt), giả sử label A được đặt tại dòng 1. Chương trình sẽ quay lại chạy từ dòng 1 thay vì chạy theo trình tự từ trên xuống dưới.
Hãy cùng xem cú pháp của nó để hiểu rõ hơn nhé.
goto label; . . . label: statement; //hoặc label: statement; . . . goto label;
Trong đó:
- label: được định nghĩa bởi lập trình viên, khi gặp lệnh goto chương trình trình sẽ nhảy tới label đó và bắt đầu thực thi đoạn code từ đó.
- statement: là các câu lệnh được thực thi.
Hãy cùng xem một ví dụ dưới đây. Chương trình sẽ yêu cầu người dùng nhập vào một số, nó sẽ kiểm tra nếu là số lẻ thì yêu cầu nhập lại, ngược lại là số chẵn thì hiển thì thông báo thành công.
Chương trình C++:
#include <iostream> using namespace std; int main() { InsertData: int number; cout << "Nhập vào số cần kiểm tra: "; cin >> number; if (number % 2 == 0){ cout << "=> Nhập số chẵn thành công!"<< endl; } else { cout << "=> Đây là số lẻ, vui lòng nhập lại!!!" << endl; goto InsertData; } cout<<"\n-----------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Chương trình C:
#include <stdio.h> int main(void) { int number; InsertData: printf("Nhập vào số cần kiểm tra: "); scanf("%d", &number); if (number % 2 == 0){ printf("=> Nhập số chẵn thành công!\n"); } else { printf("=> Đây là số lẻ, vui lòng nhập lại!!!\n"); goto InsertData; } printf("\n-----------------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Kết quả:
Lưu đồ hoạt động của lệnh goto trong C / C++.
Có nên sử dụng lệnh goto trong C / C++ hay không?
Để trả lời cho cầu hỏi có nên sử dụng lệnh goto trong C / C++ để lập trình hay không. Các bạn hãy xem qua hai ví dụ dưới đây, sau đó mình sẽ đưa ra các ưu điểm và nhược điểm của việc sử dụng lệnh goto nhé.
Cũng là chương trình yêu cầu người dùng nhập vào một số nguyên, sau đó kiểm tra nếu người dùng nhập vào số lẻ thì bắt nhập lại. Nếu là số chẵn thì thông báo đã nhập số chẵn thành công.
Chương trình sử dụng lệnh goto trong C / C++.
#include <iostream> using namespace std; int main() { InsertData: int number; cout << "Nhập vào số cần kiểm tra: "; cin >> number; if (number % 2 == 0){ cout << "=> Nhập số chẵn thành công!"<< endl; } else { cout << "=> Đây là số lẻ, vui lòng nhập lại!!!" << endl; goto InsertData; } cout<<"\n-----------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Chương trình không sử dụng lệnh goto trong C / C++.
#include <iostream> using namespace std; int main() { int number; do{ cout << "Nhập vào số cần kiểm tra: "; cin >> number; if(number % 2 != 0){ cout << "=> Đây là số lẻ, vui lòng nhập lại!!!" << endl; } else{ cout << "=> Nhập số chẵn thành công!"<< endl; } }while(number % 2 != 0); cout<<"\n-----------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Như các bạn thấy thì nếu không sử dụng lệnh goto mình vẫn có thể sử dụng vòng lặp do...while để thực hiện chương trình.
Trong lúc lập trình, nếu không phải trường hợp đặc biết cần sử dụng lệnh goto thì chúng ta không nên lạm dụng nó nhé. Bởi nó có các nhược điểm dưới đây:
- Rất dễ làm cho chương trình bị lặp vô hạn.
- Có thể sử dụng các vòng lặp hoặc lệnh, break, continue thay thế cho lệnh goto.
- Rất khó bảo trị code. Khi chúng ta sử dụng nhiều lệnh goto trong chương trình thì việc bảo trì chương trình thật sự kinh khủng.
- Làm cho chương trình trở nên phức tạp hơn.
Ví dụ sử dụng lệnh goto trong C / C++
Trong phần này mình sẽ thực hiện một ví dụ sử dụng lệnh goto trong C / C++, được viết bằng hai ngôn ngữ khác nhau là C và C++.
Ví dụ: Viết một chương trình yêu cầu người dùng nhập vào số tuổi của mình (điều kiện tuổi phải lớn hơn 0 và nhỏ hơn 100). Nếu tuổi không hợp lệ thì yêu cầu nhập lại, ngược lại thì thông báo nhập tuổi thành công.
Chương trình C:
#include <stdio.h> int main(void) { int tuoi; NhapTuoi: printf("Vui lòng nhập lại tuổi của bạn: \n"); printf("Tuổi của bạn là: "); scanf("%d", &tuoi); if (tuoi < 1 || tuoi > 100){ goto NhapTuoi; } else { printf("Bạn đã nhập tuổi thành công\n"); } printf("\n-----------------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Kết quả:
Chương trình C++:
#include <iostream> using namespace std; int main() { NhapTuoi: cout << "Vui lòng nhập lại tuổi của bạn: " << endl; cout << "Tuổi của bạn là: "; int tuoi; cin >> tuoi; if (tuoi < 1 || tuoi > 100){ goto NhapTuoi; } else { cout << "Bạn đã nhập tuổi thành công" << endl; } cout<<"\n-----------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Lời kết
Như vậy là chúng ta đã cùng nhau tìm hiểu về lệnh goto trong C / C++. Đây cũng là kiến thức cuối cùng mình giới thiệu đến các bạn trong serries này. Ở bài tiếp theo mình sẽ đưa ra các bài tập sử dụng các câu lệnh if, switch...case, vòng lặp, ... . Các bạn chú ý theo dõi nhé !!!