Chương trình kiểm tra mật khẩu
Chương trình kiểm tra mật khẩu Tháng Năm 21, 2017 nguyenvanquan7826 TUT Bài tập tư duy lập trình 2 responses Đề bài: Viết chương trình kiểm tra mật khẩu người dùng khi đăng nhập. Người dùng phải đăng nhập khi đến khi nào đúng ...
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(" username or passwrod incorrect "); printf("Enter your username: "); gets(user); printf("Enter your password: "); gets(pass); } printf("Login success! "); 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(" username or passwrod incorrect "); 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! "); 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