Kiểu Dữ Liệu Xâu Kí Tự Trong C ++, Xâu Ký Tự Trong C++
Bạn đang quan tâm đến Kiểu Dữ Liệu Xâu Kí Tự Trong C ++, Xâu Ký Tự Trong C++ phải không? Nào hãy cùng VCCIDATA đón xem bài viết này ngay sau đây nhé, vì nó vô cùng thú vị và hay đấy!
XEM VIDEO Kiểu Dữ Liệu Xâu Kí Tự Trong C ++, Xâu Ký Tự Trong C++ tại đây.
Khi lập trình C trên Windows, bạn có thể sử dụng fflush() để làm sạch bộ đệm trước khi nhập một xâu, tránh tình trạng “lạc trôi” của lệnh nhập xâu. Tuy nhiên khi làm việc với các hệ thống khác như Linux, hay Mac OS, mọi chuyện không đơn giản nữa: nhiều khi fflush() sẽ không làm việc. Bài viết này sẽ cho bạn một cách giải quyết đơn giản có thể chạy được trên cả Linux, Mac OS và cả Windows.
Đang xem: Xâu kí tự trong c
Vấn đề gì khi không sử dụng fflush() và cả khi sử dụng nó?
Không sử dụng fflush() (và các phương pháp thay thế):
Hãy xem xét đoạn chương trình sau:
1#include 2#include 3 4int main(int argc, char const *argv<>) 5{ 6 int c; 7 char s<100>; 8 9 printf(“c = “); scanf(“%d”, &c);10 printf(“s = “);11 fgets(s, 100, stdin);12 if (strlen(s) > 0) // xoá kí tự '
' ở cuối khi nhập bằng fgets13 if (s
')14 s
“, c);17 printf(“s = %s
“, s);18 19 return 0;20}
Khi chạy chương trình ta thu được kết quả sau:
Rõ ràng xâu s đã không được nhập vào. Vấn đề này xảy ra do khi nhập c bằng scanf() thì kí tự
vẫn còn lưu trong bộ đệm bàn phím. Khi lệnh nhập s (fgets) chạy, nó gặp kí tự
trong bộ đệm do vậy trả luôn về một xâu chỉ chứa
.
Vậy khi sử dụng fflush() để làm sạch bộ đệm thì có vấn đề gì?
Bạn có thể giải quyết vấn đề trôi lệnh trên Windows bằng cách thêm một lệnh fflush() vào trước fgets(). Tuy vậy khi chuyển chương trình sang Linux hoặc Mac OS thì nhiều khi lệnh này sẽ không còn hoạt động.
Phương pháp nhập xâu trong C
Google một thời gian tôi cũng tìm được câu trả lời cho phương pháp nhập xâu trong các hệ thống ngoài Windows. Đơn giản là bạn thêm đoạn lệnh sau khi trong bộ đệm vẫn còn kí tự
.
Xem thêm: Uống Nước Tiểu Có Sao Không ? Sự Thật Bài Thuốc Chữa Bách Bệnh Bằng Nước Tiểu
1int ch;2do { ch = getchar(); } while (ch != '
' && ch != EOF);
Sử dụng trong chương trình bên trên thì có vẻ khá ổn. Tuy nhiên nếu trước đó không có số nguyên c được nhập thì sao? Có vẻ không ổn rồi! – Chương trình sẽ dừng lại, nhận vào một kí tự rồi mới tiếp tục chạy.
Vậy cách giải quyết thế nào? Tôi xin đưa ra cách tôi đã dùng:
1#include 2#include 3 4void removeLastEnter(char *s) { 5 if (strlen(s) != 0) 6 if (s
') 7 s