- vừa được xem lúc

[Imperative Programming + C] Bài 8 - Goto & Looping

0 0 14

Người đăng: Semi Art

Theo Viblo Asia

Bên cạnh cấu trúc if..else hỗ trợ điều khiển logic thực thi code dựa trên điều kiện được cung cấp, thì C còn cung cấp một bộ công cụ khác giúp thay đổi trình tự thực thi các câu lệnh. Đó là lệnh goto và thao tác gắn nhãn label: cho một câu lệnh đơn hoặc một khối lệnh nào đó.

goto label;

Logic hoạt động của câu lệnh này rất đơn giản. Trình thực thi code sẽ di chuyển thẳng tới vị trí câu lệnh đơn hoặc khối lệnh nào đó ở trong cùng phạm vi của sub-program hiện tại và có gắn nhãn label:.

#include <stdio.h> int main() { goto label; printf("This statement should be ignored."); label: printf("This statement is labeled."); // - - - - - - - - - - - - - - - - - - return 0;
}
gcc main.c -o main
main This statement is labeled.

Trong đó thì tên nhãn label có thể được đặt tùy ý miễn sao không phải là một từ khóa đã được định nghĩa sẵn của C hoặc tên biến hay tên một chương trình con nào đó.

goto loop

Chức năng của câu lệnh goto label; không bị giới hạn là phải luôn di chuyển tới một vị trí được gắn nhãn label: sau đó. Chúng ta hoàn toàn có thể sử dụng goto label; ở vị trí đứng sau điểm được gắn nhãn label: để lặp lại tiến trình thực thi một đoạn code. Tuy nhiên trong trường hợp này thì chúng ta sẽ cần thiết lập thêm một cơ chế để dừng việc xoay vòng từ goto label; sau một số lần lặp hữu hạn.

#include <stdio.h> int main() { int count = 0; // - - - - - - - - - - - - - - - - - - loop: printf("\n Do something ..."); count += 1; printf("\n Looped %i time(s)", count); if (count < 9) goto loop; // - - - - - - - - - - - - - - - - - - return 0;
}
gcc main.c -o main
main Do something ... Looped 1 times Do something ... Looped 2 times Do something ... Looped 3 times Do something ... Looped 4 times Do something ... Looped 5 times Do something ... Looped 6 times Do something ... Looped 7 times Do something ... Looped 8 times Do something ... Looped 9 times

Trong code ví dụ ở trên, chúng ta có hai điểm nối mở đầu và kết thúc vòng lặp là vị trí gắn nhãn loop: và vị trí xét điều kiện để quay trở lại bằng goto loop;.

Các câu lệnh ở giữa hai điểm này có thể được viết thẳng hàng mà không cần thụt vào thêm một khoảng như trong code ví dụ. Tuy nhiên nếu viết thụt vào như vậy chúng ta sẽ dễ quan sát hơn. Và đồng thời những câu lệnh ảnh hưởng tới biến xét điều kiện như biến count trong ví dụ trên nên được đặt ở ví trí đầu hoặc cuối của vòng lặp, hoặc viết lùi lại ngang hàng với hai điểm nối mở đầu vòng lặp và xét điều kiện lặp.

Các cú pháp lặp

Việc cần phải viết code để tự động lặp lại một số thao tác xử lý là rất phổ biến và vì vậy nên C có cung cấp các cú pháp lặp mà mình thường gọi là các cú pháp vòng lặp nguyên thủy.

Tất cả các cú pháp này về cơ bản là được đưa ra để chúng ta không phải viết các lệnh goto và đặt nhiều tên loop_label khi cần viết nhiều vòng lặp trong cùng một đoạn code. Nhờ vậy thì code viết bởi nhiều người khác sau sẽ có giao diện chung về các từ khóa tượng trưng cho vòng lặp như for, while, do..while.

Tuy nhiên thì mỗi lựa chọn đều có lợi điểm riêng và mình chọn tiếp tục sử dụng goto label; để tự tạo các logic code lặp trong C. Lý do là bởi vì mình không học C để thi Hackathon hay hướng đến lập trình nhúng trên các thiết bị đầu cuối, vì vậy nên sẽ không quan tâm mấy tới những cú pháp "ngắn gọn" sẵn có của C.

Thay vào đó thì mình muốn sử dụng những công cụ cơ bản của C cung cấp để xây dựng nên những công cụ cần sử dụng có cú pháp thân thiện với một newbie JavaScript như mình. 😄

(chưa đăng tải) [Imperative Programming + C] Bài 9 - Header & Preprocessor

Bình luận

Bài viết tương tự

- vừa được xem lúc

Closure trong Javascript - Phần 2: Định nghĩa và cách dùng

Các bạn có thể đọc qua phần 1 ở đây. Để mọi người không quên, mình xin tóm tắt gọn lại khái niệm lexical environment:.

0 0 51

- vừa được xem lúc

Var vs let vs const? Các cách khai báo biến và hằng trong Javascript

Dạo này mình tập tành học Javascript, thấy có 2 cách khai báo biến khác nhau nên đã tìm tòi sự khác biệt. Nay xin đăng lên đây để mọi người đọc xong hy vọng phân biệt được giữa let và var, và sau đó là khai báo hằng bằng const.

0 0 31

- vừa được xem lúc

VueJS: Tính năng Mixins

Chào mọi người, hôm nay mình sẽ viết về Mixins và 1 số vấn đề trong sử dụng Mixins hay ho mà mình gặp trong dự án thực. Trích dẫn từ trang chủ của VueJS:.

0 0 27

- vừa được xem lúc

Asset Pipeline là cái chi chi?

Asset Pipeline. Asset pipeline là cái chi chi. . Giải thích:.

0 0 47

- vừa được xem lúc

Tạo data table web app lấy dữ liệu từ Google Sheets sử dụng Apps Script

Google Sheets là công cụ tuyệt vời để lưu trữ bảng tính trực tuyến, bạn có thể truy cập bảng tính bất kỳ lúc nào ở bất kỳ đâu và luôn sẵn sàng để chia sẻ với người khác. Bài này gồm 2 phần.

0 0 266

- vừa được xem lúc

Học Deep Learning trên Coursera miễn phí

Bạn muốn bắt đầu với Deep Learning nhưng không biết bắt đầu từ đâu? Bạn muốn có một công việc ở mức fresher về Deep Learning? Bạn muốn khoe bạn bè về kiến thức Deep Learning của mình. Bắt đầu từ đâu.

0 0 35