簡體   English   中英

為什么fscanf不先轉換set然后再轉換char?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM