Từ đầu chúng ta tránh sử dụng chuỗi trong các ví dụ. Lý do vì chúng ta chưa bàn tới chuỗi. Trong chương trình tào lao, chúng ta chủ yếu sử dụng biến ký tự char, nếu cần biết tên, chúng ta đơn giản chỉ yêu cầu người dùng nhập một ký tự như A,B,C...
Chuỗi, mảng ký tự trong C được sử dụng để lưu trữ một chuỗi ký tự như tên người, đoạn văn, ngày sinh, email...Trong các phần trước chúng ta sử dụng hàm scanf() và printf() để đọc ký tự từ bàn phím và in ra màn hình. Tuy nhiên, hàm scanf() có nhược điểm là khi gặp khoảng trắng nó sẽ coi như bạn đã kết thúc việc nhập từ bàn phím và nó sẽ lờ đi tất cả những gì bạn gõ vào sau khoảng trắng.
Với chương trình đơn giản sau, nếu bạn gõ vào tên bạn liền nhau là NguyenVanA thì mọi chuyện rất tốt đẹp. Vẫn tiếp tục sử dụng IDE Online, chúng ta chạy thử chương trình
Nhưng nếu bạn gõ vào tên bạn là Nguyen Van A thì bạn sẽ thấy kết quả không như mong đợi. Chương trình chỉ in ra màn hình Nguyen, phần còn lại bị bỏ qua.
Đây là chương trình
#include <stdio.h>
int main() {
// Tao mot chuoi
char hoTen[30];
// Hoi tên ngươi su dung
printf("Ten ban là gi: \n");
// Nhan ten tu ban phim
scanf("%s", hoTen);
// In ra man hinh
printf("Xin chao: %s", hoTen);
return 0;
}
Chính vì vậy, để đọc một dòng văn bản do người dùng nhập vào, ngôn ngữ C sử dụng hàm fgets().
Hàm fgets() trong C được sử dụng để đọc một dòng ký tự từ một file đã cho.
Cú pháp:
fgets(str , nums, stdin)
- str − Đây là con trỏ tới một mảng ký tự nơi lưu trữ chuỗi đã đọc.
- nums− Đây là số ký tự tối đa được đọc (bao gồm ký tự null cuối cùng).
- stdin − Đây là con trỏ tới một đối tượng FILE. Tạm thời ta chưa bàn về FILE nên chúng ta sẽ mặc định sử dụng toán tử stdin tại đây.
Trong phần trước, ta đã thấy rằng tên của mảng chính là con trỏ. Vì vậy tham số đầu cho hàm fgets() cho chương trình trên sẽ là hoTen
Số ký tự tối đa cũng chính là kích thước của mảng, ta sẽ sử dụng hàm sizeof().
Tới đây, chúng ta sẽ thử sửa lại chương trình trên, chúng ta sẽ thay hàm scanf() bằng hàm fgets() như sau:
#include <stdio.h>
int main() {
// Tao mot chuoi
char hoTen[30];
// Hoi tên ngươi su dung
printf("Ten ban là gi: \n");
// Nhan ten tu ban phim
fgets(hoTen, sizeof(hoTen), stdin);
// In ra man hinh
printf("Xin chao: %s", hoTen);
return 0;
}
Chạy thử, ta sẽ thấy chương trình đã "trở lại và lợi hại hơn xưa"
Không có nhận xét nào:
Đăng nhận xét