fscanf和换行符

Yan*_*ang 14 c regex file-io

我有fscanf从配置文件中读取设置行.这些设置具有严格预定义的格式,看起来像

name1=option1;
name2=option2;
...
Run Code Online (Sandbox Code Playgroud)

所以基本上我做

fscanf(configuration,"%[^=]=%[^;];",name,option);
Run Code Online (Sandbox Code Playgroud)

其中配置是文件流,名称和选项是编程缓冲区.

问题是名称缓冲区包含我不想要的换行符.是否有格式说明符我在"[^ ...]"设置中错过了跳过换行符?无论如何,它可以通过格式说明符解决吗?

BTW:通过写这个来吞掉换行符

"%[^=]=%[^;];\n"
Run Code Online (Sandbox Code Playgroud)

我认为,换行符可能会在任何地方重复不止一次.

Evg*_*uev 13

只需在格式字符串的末尾添加空格:

"%[^=]=%[^;]; "
Run Code Online (Sandbox Code Playgroud)

这将占用所有空白字符,包括换行符.

来自cplusplus.com的报价:

空白字符:该函数将读取并忽略下一个非空白字符之前遇到的任何空白字符(空格字符包括空格,换行和制表符 - 看到isspace为).格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无).


Cli*_*ord 8

另一种方法是使用fgets()将整行读入字符串,然后使用sscanf().这在调试方面具有优势,因为您可以准确地看到该函数正在处理哪些数据.