fscanf和换行符

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

name1=option1; name2=option2; ... 

所以基本上我做

 fscanf(configuration,"%[^=]=%[^;];",name,option); 

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

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

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

 "%[^=]=%[^;];\n" 

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

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

 "%[^=]=%[^;]; " 

这将占用所有空格字符,包括换行符。

来自cplusplus.com的报价:

空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格,换行符和制表符 – 请参阅isspace)。 格式字符串中的单个空格validation从流中提取的任何数量的空白字符(包括无)。

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

这将有效:

fscanf(configuration,"%[^=]=%[^;];%[^\n]",name,option,dummy);

您将不得不使用换行符。否则,换行符将保留在输入流中。