[英]fscanf and newline character
我有fscanf從配置文件中讀取設置行。 這些設置具有嚴格預定義的格式,看起來像
name1=option1;
name2=option2;
...
所以基本上我做
fscanf(configuration,"%[^=]=%[^;];",name,option);
其中配置是文件流,名稱和選項是編程緩沖區。
問題是名稱緩沖區包含我不想要的換行符。 是否有格式說明符我在“[^ ...]”設置中錯過了跳過換行符? 無論如何,它可以通過格式說明符解決嗎?
BTW:通過寫這個來吞掉換行符
"%[^=]=%[^;];\n"
我認為,換行符可能會在任何地方重復不止一次。
只需在格式字符串的末尾添加空格:
"%[^=]=%[^;]; "
這將占用所有空白字符,包括換行符。
來自cplusplus.com的報價:
空白字符:該函數將讀取並忽略在下一個非空白字符之前遇到的任何空白字符(空白字符包括空格,換行符和制表符 - 請參閱isspace)。 格式字符串中的單個空格驗證從流中提取的任何數量的空白字符(包括無)。
另一種方法是使用fgets()
將整行讀入字符串,然后使用sscanf()
。 這在調試方面具有優勢,因為您可以准確地看到該函數正在處理哪些數據。
這將有效:
fscanf(configuration,"%[^=]=%[^;];%[^\\n]",name,option,dummy);
您將不得不使用換行符。否則,換行符將保留在輸入流中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.