Contents
Vòng lặp vô hạn là gì?
Vòng lặp vô hạn là chuỗi các câu lệnh được thực hiện lặp đi lặp lại không có điểm dừng. Nguyên nhân có thể là:
- Vòng lặp chưa có điều kết thúc vòng lặp
- Vòng lặp có điều điều kiện để kết thúc vòng lặp nhưng điều kiện này không bao giờ được đáp ứng.
- Hoặc có thể một logic nào đó dẫn đến lặp vô hạn (ví dụ: lệnh goto có thể tạo ra vòng lặp)
- Chương trình bị dính vòng lặp vô hạn, chương trình có thể bị gây treo PC hoặc bị crash (nếu trong vòng lặp khai bao biến hoặc cấp phát vùng nhớ mà không giải phóng vùng nhớ).
- Do vậy, cần tránh để xảy ra vòng lặp vô hạn trong chương trình.
- Trong một số trường hợp (requirement), lập trình viên không xác định chính xác được số lần lặp để xử lí 1 logic nào đó. Lúc này, lập trình viên phải sử dụng khai báo vòng lặp vô hạn for(), while(), do while().
Các dạng của vòng lặp vô hạn trong ngôn ngữ C
Vòng lặp vô hạn for
Khai báo:
for ( ; ; ) { // place code here }
Ví dụ: Nhập và in ra chuỗi đã nhập. Việc nhập kết thúc khi nhập “quit”.
#include <stdio.h> #include <string.h> #include <conio.h> void main() { char s[100]; for ( ; ; ) { printf("\nNhap chuoi: "); gets(s); if(strcmp(s, "quit") == 0) { break; } printf("\ns = %s", s); } getch(); }
Vòng lặp vô hạn while
Khai báo:
while(1) { //pleace code here }
Ví dụ: Nhập số nguyên lớn hơn 0. Nếu nhập số <= 0, yêu cầu nhập lại.
#include <stdio.h> #include <string.h> #include <conio.h> void main() { int n; while (1) { printf("\nNhap n: "); scanf("%d", &n); if(n > 0) { break; } } printf("\nn = %d", n); getch(); }
Vòng lặp vô hạn do while
Khai báo:
do { //place code here } while (1);
Ví dụ: Nhập số nguyên lớn hơn 0. Nếu nhập số <= 0, yêu cầu nhập lại.
#include <stdio.h> #include <string.h> #include <conio.h> void main() { int n; do { printf("\nNhap n: "); scanf("%d", &n); if(n > 0) { break; } } while(1); printf("\nn = %d", n); getch(); }
Làm thế nào để điều chỉnh tốc độ của vòng lặp vô hạn for vậy ạ,ad rep em với ạ, em cảm ơn!
@Tahieu,
>Làm thế nào để điều chỉnh tốc độ của vòng lặp vô hạn for vậy ạ,ad rep em với ạ, >em cảm ơn!
Điều chỉnh tốc độ là sao nhỉ bạn?
ý của bạn là dừng màn hình ?
trong c++ thì bạn dùng lệnh cin.get();
trong c thì dùng getchar();
thế không may bị treo máy do dùng vòng lặp vô hạn hoặc goto ngu thì phải làm sao hả ad?
Sửa code và trách thằng coder ngu thôi :)), nếu bạn làm nhiều về IPC (Socket, Mapping file, Shared memory, Named Pipe, MSG queue). Việc dùng infinitive loop là cần thiết.