Các lệnh rẽ nhánh vô điều kiện trong C – return, goto, break, continue, hàm exit
- 08-01-2023
- Toanngo92
- 0 Comments
Mục lục
Các lệnh rẽ nhánh vô điều kiện (Jump Statements)
C có bốn câu lệnh thực hiện phép rẽ nhánh không điều kiện: return, goto, break và continue Phép rẽ nhánh vô điều kiện có nghĩa là chuyển luồng chương trình từ điểm cần đến một câu lệnh xác định.
Trong số các câu lệnh ở trên, return và goto có thể được sử dụng ở bất kỳ đâu trong chương trình, trong khi các câu lệnh break và continue được sử dụng cùng trong các vòng lặp.
Câu lệnh return
Câu lệnh return được sử dụng để quay về từ một hàm. Nó khiến việc thực thi trở lại điểm mà tại đó lệnh gọi hàm được thực hiện. Câu lệnh return có thể có một giá trị với nó, mà nó trả về đến chương trình.
Về phần này, chúng ta có thể thảo luận thêm ở bài viết về hàm (functions) trong C.
Cú pháp tổng quát:
data_type function_name(parmeters){
// todo
return expression;
}
expression là tùy chọn. Có thể sử dụng nhiều hơn một lần trả về trong một hàm. Tuy nhiên, hàm sẽ quay lại hàm (calling function) gọi khi gặp câu lệnh return và bỏ qua toàn bộ các lệnh phía sau.
Ví dụ:
int exmaplereturnfunction(){
int a = 5;
int b = 6;
int sum = 0;
sum = a + b;
return sum;
sum = sum+10;
}
int main(){
int result;
result = exmaplereturnfunction();
return 0;
}
Câu lệnh goto
Mặc dù C là ngôn ngữ lập trình có cấu trúc nhưng nó chứa các dạng chương trình phi cấu trúc sau:
- goto
- label
Câu lệnh goto không chỉ chuyển luồng chạy về một điểm thực thi bất kỳ câu lệnh nào khác trong cùng một hàm (function) trong chương trình C mà còn cho phép nhảy vào và nhảy ra khỏi khối. Do đó, nó vi phạm các quy tắc của một cấu trúc chặt chẽ.
Cú pháp tổng quát:
goto label;
Trong đó label là một mã định danh phải xuất hiện dưới dạng tiền tố cho một câu lệnh C khác trong cùng một hàm. Dấu chấm phẩy (;) sau mã định danh label đánh dấu kết thúc câu lệnh goto. câu lệnh goto trong chương trình khiến nó khó đọc. Chúng làm giảm độ tin cậy của chương trình và làm cho chương trình khó duy trì. Tuy nhiên, chúng được sử dụng vì chúng có thể cung cấp các phương tiện hữu ích để thoát khỏi các vòng lặp lồng nhau sâu.
Ví dụ:
void examplegoto(){
int i;
double number, average = 0.0, sum = 0.0;
daylavitrigt:
average = sum / (i - 1);
printf("Sum = %.2f\n", sum);
printf("Average = %.2f", average);
for (i = 1; i <= 100; ++i) {
printf("%d. Enter a number: ", i);
scanf("%lf", &number);
// go to jump if the user enters a negative number
if (number < 0.0) {
goto daylavitrigt;
// break;
}
sum += number;
}
}
int main(){
examplegoto();
return 0;
}
Câu lệnh break
Câu lệnh break có hai cách sử dụng. Nó có thể được sử dụng để kết thúc một trường hợp trong câu lệnh switch và để buộc kết thúc vòng lặp ngay lập tức, bỏ qua kiểm tra điều kiện của vòng lặp thông thường.
Khi gặp câu lệnh break bên trong một vòng lặp, vòng lặp đó lập tức kết thúc và luồng chạy chương trình được chuyển đến câu lệnh theo sau vòng lặp, không cần quan tâm điều kiện có thỏa mãn hay không.
Ví dụ:
void examplebreakinloop(){
int count1, count2;
for(count1 = 1, count2 = 0;count1 <=100; count1++)
{
printf("Enter %d count2 : ",count1);
scanf("%d", &count2);
if(count2==20) {
break;
}
}
printf("End loop");
}
int main(){
examplebreakinloop();
return 0;
}
Câu lệnh continue
Câu lệnh continue làm cho lần lặp tiếp theo của vòng lặp kèm theo được thực hiện. Khi câu lệnh này được bắt gặp trong chương trình, các câu lệnh còn lại trong phần thân của vòng lặp sẽ bị bỏ qua và luồng chạy được chuyển sang bước khởi tạo lại cho lần lặp tiếp theo.
Trong trường hợp của vòng lặp for, continue chạy sang lần lặp tiếp theo và sau đó kiểm tra điều kiện được thực thi. Trong trường hợp có các vòng lặp while và do while, luồng chương trình sẽ chuyển sang phần kiểm tra điều kiện.
Ví dụ:
void examplecontinueinloop(){
int num;
for(num = 1; num <=100; num++)
{
if(num % 9 != 0) {
continue;
printf("%d\t",num);
printf("dsfsdfsdfsdfsdf");
}
printf("%d\t",num);
}
}
int main(){
examplecontinueinloop();
return 0;
}
Hàm exit()
exit() là một hàm thư viện C tiêu chuẩn. Hoạt động của nó tương tự như hoạt động của câu lệnh rẽ nhanh vô điều kiện,tuy nhiên điểm khác biệt chính là câu lệnh rẽ nhánh vô điều kiện được sử dụng để thoát ra khỏi vòng lặp, trong khi exit() được sử dụng để thoát khỏi chương trình. Chức năng này khiến chương trình kết thúc ngay lập tức và quyền điều khiển được chuyển trở lại hệ điều hành.
Cú pháp:
exit (int return_code);
Trong đó, return_code là tùy chọn. số không thường được sử dụng 0 return_code để biểu thị xu hướng chương trình bình thường. Các giá trị khác chỉ ra một số lỗi.
Ví dụ:
void exampleexitprogram(){
int count1, count2;
for(count1 = 1, count2 = 0;count1 <=5; count1++)
{
printf("Enter %d count2 : ",count1);
scanf("%d", &count2);
if(count2==20){
exit(100);
// break;
}
}
printf("End loop");
}
int main(){
exampleexitprogram();
return 0;
}