1
Có những cách đọc chuỗi ký tự nhập từ bàn phím nào trong C/C++?
2
Hiệp Hào30 đã đăng:

Cho mình hỏi có những hàm nào đọc chuỗi ký tự từ bàn phím trong C/C++? Đặc điểm của từng hàm và ví dụ?

thêm bình luận...
3
Thanh30 đã đăng:

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ỗi Toi xem tivi thì hàm scanf 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ổ sung 3.2 năm trước bởi
Avatar: Thanh Thanh30

Như cách 1 mình dùng scanf tại sao không được nhỉ?

Cộng đồng 22.10.2019

Mình chạy bình thường mà, bạn sử dụng IDE nào để code, nếu là Visual Studio thì có thể là khác phiên bản rồi, ở các phiên bản mới hơn thì cần phải include thêm một số cái nữa chứ không chỉ đơn giản là những câu lệnh trên, bạn share các message báo lỗi là gì nhìn là biết ngay.

Cộng đồng 25.10.2019
thêm bình luận...

Câu trả lời của bạn

Chào mừng bạn đến với cộng đồng chia sẻ tri thức BanhoiTuidap.com, bạn có thể chia sẻ bất kỳ sự hiểu biết, nghiên cứu hoặc kinh nghiệm của mình về câu hỏi này với một số lưu ý:
  • Lịch sự, tế nhị.
  • Hạn chế ghi tắt, câu trả lời của bạn chỉ nên tập trung vào câu hỏi ở trên.
Câu trả lời của bạn sẽ được đăng ở chế độ cộng đồng, cho nên bạn sẽ không thể chỉnh sửa sau khi đăng, có thể đăng ký thành viên trên BanhoiTuidap.com khi bạn muốn theo dõi câu hỏi này hoặc chủ đề liên quan.
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)