Tôi có fscanf để đọc các dòng cài đặt từ tệp cấu hình. Những thiết lập đã được xác định trước đúng định dạng trông giống nhưfscanf và ký tự dòng mới
name1=option1;
name2=option2;
...
nên về cơ bản tôi làm
fscanf(configuration,"%[^=]=%[^;];",name,option);
nơi cấu hình là các dòng tập tin và tên và lựa chọn được lập trình bộ đệm.
Vấn đề là bộ đệm tên chứa ký tự dòng mới mà tôi không muốn. Có specifier định dạng tôi đã bỏ lỡ trong "[^ ...]" thiết lập để bỏ qua ký tự newline? Dù sao, nó có thể được giải quyết thông qua định dạng specifier bao giờ?
BTW: Nuốt kí tự xuống dòng bằng writting này
"%[^=]=%[^;];\n"
không elegent Tôi nghĩ cho rằng kí tự xuống dòng có thể lặp lại nhiều hơn một lần ở bất cứ đâu.
Nếu trường 'nameN' không thể chứa khoảng trắng, chỉ cần thêm dấu cách vào trước chuỗi định dạng -' "% [^ =] =% [^;];" '- để bỏ qua khoảng trống phía trước. Nếu chúng có thể, bạn cần phải tiêu thụ dòng mới bằng 'getchar()'. –
Câu trả lời được chấp nhận là đúng, dù sao, về các dòng mới lặp lại, bạn có thể sử dụng '% * [\ n]' để đọc một số tùy ý ''\ n'' mà không lưu trữ chúng. – effeffe