Tôi đã đọc về hoạt động của các bộ quét. Qua nghiên cứu và thử nghiệm, tôi đã gặp một vấn đề.
Có thể nào scanf("%[^\n]")
hành vi và scanf("%s")
Có giống nhau không?
scanf("%s")
Tiêu thụ ký tự cho đến khi stdin
Các ký tự khoảng trắng được tìm thấy trong, ví dụ \N
ký tự. Vì vậy, kết quả sẽ là vàscanf("%[^\n]")
Hoàn toàn giống nhau.
Ví dụ:
char str[100];
scanf("%99[^\n]s", str);
So với:
char str[100];
scanf("%99s",str);
所以我的问题是:
Hành vi đó có giống nhau không vì scanf("%s")
Dừng ở ký tự khoảng trắng ở cuối (ví dụ: dòng mới)?
Tại sao tôi nên triển khai scanf("%[^\n]")
Và scanf("%s")
Bạn đã thực hiện thao tác tương tự chưa?
Cảm ơn bạn rất nhiều.
Có vẻ như bạn đã nhầm tưởng rằng scanset là %s
Một số loại sửa đổi, như trong ví dụ của bạn:
scanf("%[^\n]s", str);
Đây là một chuỗi ở định dạng scanf và không phải lúc nào cũng khớp với văn bản ở cuối. 'S'
.
ngược lại,%[
là với %s
Các chỉ định chuyển đổi hoàn toàn khác nhau. %s
Tiêu thụ trước khi bắt đầu và bỏ qua mọi khoảng trắng ban đầu, sau đó dừng ở khoảng trắng. %[
Các khoảng trắng ở đầu hoàn toàn không bị bỏ qua và chỉ dừng lại ở các ký tự không khớp - nó không xử lý các khoảng trắng một cách đặc biệt.
Tôi là một lập trình viên xuất sắc, rất giỏi!