我有fscanf从配置文件中读取设置行。这些设置具有严格预定义的格式,看起来像
name1=option1;
name2=option2;
...
所以基本上我做了
fscanf(configuration,"%[^=]=%[^;];",name,option);
其中configuration是文件流,name和option是编程缓冲区。
问题是名称缓冲区包含我不想要的换行符。是否有格式说明符我在“[^ ...]”设置中错过了跳过换行符?无论如何,它可以通过格式说明符解决吗?
BTW:通过写这个
吞下换行符"%[^=]=%[^;];\n"
并不是一种优势,我认为换行符可以在任何地方重复多次。
答案 0 :(得分:12)
只需在格式字符串的末尾添加空格:
"%[^=]=%[^;]; "
这会占用所有空白字符,包括换行符。
来自cplusplus.com的报价:
空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格,换行符和制表符 - 请参阅isspace)。格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无)。
答案 1 :(得分:7)
另一种方法是使用fgets()
将整行读入字符串,然后使用sscanf()
。这在调试方面具有优势,因为您可以准确地看到该函数正在处理哪些数据。
答案 2 :(得分:1)
这将有效:
fscanf(configuration,"%[^=]=%[^;];%[^\n]",name,option,dummy);
您必须使用新的换行符。否则,换行符将保留在输入流中。