[英]Why doesn't fscanf convert set and then char?
如果文件foobar.txt
包含文本foobar
,則在以下代碼中
char s[16], c;
fp = fopen("foobar.txt", "r");
fscanf(fp, "%[f]s%c", s, &c);
fscanf
返回1而不是2。
而如果我將調用拆分為fscanf
:
fscanf(fp, "%[f]s", s);
fscanf(fp, "%c", &c);
然后兩個都按預期返回1。
為什么單個fscanf
不起作用?
因為s
不應該在那里,所以應該
fscanf("%[f]%c", s, &c);
當scanf()
以格式而不是輸入形式找到s
,它將停止並返回1
因為直到1個參數都匹配為止。
關鍵是, s
不是格式的一部分, []
是格式說明符,它僅包含單個字符f
,因此您應更仔細地閱讀文檔,並可以確認s
不需要格式說明符,實際上fscanf()
會將其視為請求的輸入的一部分,但它不存在,因為f
后面有一個o
,請嘗試fsobar
。
在第二種情況下,它也停止並且不占用f
之后的任何字符,然后第二次調用消耗單個字符,因此兩者均正確返回1
。
只需刪除s
並對其進行如下修改。
fscanf("%[f]%c", s, &c);
在第一種情況下,當fscanf()
在輸入中找不到s
時,它將停止並返回1。在第二種情況下,如您所述,很明顯fscanf()
將返回1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.