Chương trình kiểm tra mật khẩu
Trong thực tế, các bạn sẽ gặp bài toán này rất nhiều khi xây dựng phần mềm, wesbite mà có chức năng đăng nhập. Vậy nên bài toán này là vô cùng hữu ích.
Trước tiên các bạn cần nhận ra rằng nếu người dùng nhập đúng thì không sao, nếu người dùng nhập sai thì phải nhập lại, tức là phải lặp đi lặp lại nhiều lần. Vậy phải lặp lại bao nhiêu lần? Lặp lại đến khi nào đúng thì mới thôi -> Không thể biết trước lặp bao nhiêu lần. Vậy chúng ta phải dùng cái gì? Dùng vòng lặp mà chưa biết trước số lần lặp -> Dùng while hoặc do while.
Giờ các bạn nhớ lại ý nghĩa của vòng lặp while và do while:
- while: Trong khi cái gì đúng thì làm công việc nào đó.
- do while: Làm công việc trong khi cái gì vẫn còn đúng.
Do 2 cấu trúc này khá giống nhau về mặt ý nghĩa và cách dùng nên các bạn có thể dùng cái nào cũng được. Tuy nhiên để ý kỹ thì chúng ta sẽ thấy sự khác biệt.
Code sử dụng vòng lặp while:
/** * Program login, enter username and passwrod until they correct */ #include <stdio.h> #include <string.h> // for compare string by strcmp int main() { // username and password we have char username[] = "nguyenvanquan7826"; char passwrod[] = "0codauem"; // username and password user must enter to login char user[50], pass[50]; printf("Enter your username: "); gets(user); printf("Enter your password: "); gets(pass); while(strcmp(user, username) != 0 || strcmp(pass, passwrod) != 0) { printf("\nusername or passwrod incorrect\n"); printf("Enter your username: "); gets(user); printf("Enter your password: "); gets(pass); } printf("Login success!\n"); return 0; }
Trong code trên các bạn lưu ý một số điểm:
Sử dụng thư viện string.h để dùng hàm so sánh chuỗi strcmp.
Do user và pass là chuỗi nên chúng ta sử dụng gets để nhập chứ không nên dùng scanf.
Do vòng while là vòng lặp kiểm tra điều kiện trước, do đó chúng ta phải có cái gì đó cho nó kiểm tra, do vậy chúng ta cần nhập vào user và pass ở trước đó. Điều này làm code của chúng ta bị lặp lại thừa một lần ở phía trên trước khi dùng vòng while. Tuy nhiên chúng ta cũng có thể không cần nhập trước, như vậy chuỗi user và pass ban đầu sẽ rỗng.
Sau đây là code mà chúng ta sử dụng do-while.
/** * Program login, enter username and passwrod until they correct */ #include <stdio.h> #include <string.h> // for compare string by strcmp int main() { // username and password we have char username[] = "nguyenvanquan7826"; char passwrod[] = "0codauem"; // username and password user must enter to login char user[50], pass[50]; int count = 0; // Counting the number of login times do{ if(count > 0) printf("\nusername or passwrod incorrect\n"); printf("Enter your username: "); gets(user); printf("Enter your password: "); gets(pass); count++; }while(strcmp(user, username) != 0 || strcmp(pass, passwrod) != 0); printf("Login success!\n"); return 0; }
Trong code này, chúng ta sử dụng thêm biến count để đếm số lần login, nếu lần đầu tiên thì không hiện ra là mật khẩu sai, chỉ hiện từ lần thứ 2 trở đi mà thôi.
Về cơ bản, bài này khá dễ dàng. Hi vọng các bạn có thể nắm vững 🙂
Mới học lập trình C, học được rất nhiều thứ hay ho từ blog của bạn. Cảm ơn!
Cảm ơn bạn. Mình vừa ghé qua blog của bạn, cũng thấy rất nhiều bài viết hay trên “Tôi Sống”. 🙂
Ban oi neu minh co so lan yeu cau nhap mat khau la 5, neu nhap vao lan dau sai se bao ban con 4 lan nhap, nhap lan thu 2 sai se bao ban con 3 lan nhap,.. tiep tuc nhu vay den lan ke cuoi thi se thong bao ban chi con 1 lan nhap. Neu vay thi minh phai viet nhu the nao?
Cam on
Bạn tạo 1 biến để đếm số lần nhập sai là được.