Có rất nhiều cách đọc chuỗi ký tự từ bàn phím trong C/C++
Cách 1: đơn giản nhất là sử dụng hàm scanf
:
#include <stdio.h>
#include <conio.h>
int main(){
char A[100]; //Khai báo mảng chứa 100 ký tự
printf("Nhap vao chuoi: ");
scanf("%s", A);
printf("Chuoi vua nhap: %s", A);
}
Nhưng nhập chuỗi theo cách 1 có hai điều cần lưu ý:
- Nếu bạn nhập chuỗi quá dài lớn hơn số lượng ký tự có thể chứa mà bạn đã khai báo, trình biên dịch sẽ báo lỗi ngay
- Nếu trong chuỗi chứa các giá trị khoảng trắng thì hàm
scanf
sẽ dừng lại tại vị trí có khoảng trắng đầu tiên. Ví dụ: Nhập vào chuỗiToi xem tivi
thì hàmscanf
chỉ đọc được từToi
. Bạn có thể kiểm chứng bằng đoạn code mẫu ở trên.
Cách 2: Sử dụng hàm gets()
:
#include <stdio.h>
#include <conio.h>
int main(){
char A[100]; //Khai báo mảng chứa 100 ký tự
printf("Nhap vao chuoi: ");
gets(A);
printf("Chuoi vua nhap: %s", A);
//puts(A);
}
Sử dụng hàm gets
bạn có thể khắc phục được việc không đọc được ký tự khoảng trắng của hàm scanf
, nhưng hàm gets
vẫn gặp vấn đề về chuỗi quá dài lớn hơn số ký tự mà mảng có thể chứa.
Cách 3: Sử dụng hàm fgets()
:
#include <stdio.h>
#include <conio.h>
int main(){
char A[100]; //Khai báo mảng chứa 100 ký tự
printf("Nhap vao chuoi: ");
fgets(A, 100, stdin);
printf("Chuoi vua nhap: %s", A);
}
Hàm fgets()
có thể khắc phục được hai vấn đề trên, các tham số của hàm fgets()
bao gồm:
- Tham số thứ nhất là một con trỏ trỏ tới mảng bạn muốn lưu kết quả, ở đoạn code mẫu này là mảng
A
- Tham số thứ hai là số lượng ký tự tối đa được lưu trữ trong mảng, cho dù bạn có nhập hơn nữa vẫn lưu chừng đó ký tự, ở đoạn code mẫu này là tối đa
100
ký tự - Tham số thứ ba là con trỏ định nghĩa luồng dữ liệu, khi bạn nhập dữ liệu từ bàn phím, thì để là
stdin
.
Lưu ý:
Khi bạn nhập chuỗi từ bàn phím, một số trường hợp trình biên dịch sẽ không dừng lại màn hình cho bạn nhập chuỗi rồi mới chạy tiếp mà nó chạy thẳng lun, điều này dẫn đến chương trình bị sai. Khắc phục bằng cách thêm vào fflush(stdin)
trước mỗi hàm đọc chuỗi
Ví dụ:
printf("Nhap vao chuoi: ");
fflush(stdin);
fgets(A, 100, stdin);
Bạn có thể nhập 1 ký tự trong C, nhập một chuỗi trong C, nhập nhiều chuỗi trong C, cũng như nhập chuỗi có khoảng trắng trong C nhé.
Link tham khảo: Nhập chuỗi trong C
Với C++ bạn cũng có thể sử dụng cin, fgets, getline khi muốn nhập chuỗi ký tự từ bàn phím vào trong chương trình. Link tham khảo: Nhập chuỗi trong C++