簡體   English   中英

從 SCANF 返回 EOF

[英]Return EOF from SCANF

我仍然不明白scanf如何返回EOF值。 程序運行在 window 中。

scanf描述:

“如果在第一次轉換(如果有)完成之前發生輸入故障,scanf function 將返回宏 EOF 的值。否則,scanf function 返回分配的輸入項的數量,可能少於提供的數量,甚至零,在早期匹配失敗的情況下。”

代碼是

int main()
{
int status,a1,a2,b1;
char str1[100];

b1=EOF;
printf("b1=%d\n",b1);
printf("Enter input\n");
status=scanf("%d%d",&a1,&a2);
printf("status=%d",status);

return 0;
}

案例1輸入:

hello

output

status=0

案例2輸入:

^z  (press CTRL-Z) 

output

staus=-1

萬一是第一次轉換前的輸入失敗? 如果是第一次轉換前的輸入失敗,為什么scanf返回0。

在案例 2 中,我按 CTRL-Z 第一次輸入,然后 scanf 返回 -1,所以 scanf 返回 EOF 的唯一方法是按 CTRL-Z?如果不是,請用示例代碼解釋我

scanf邏輯相當簡單。 它返回:

  • 如果不能從 stream 讀取單個字符,則EOF
  • EOF如果只有在錯誤或文件結尾之前的前導空白字符可以讀取%c%s或掃描集以外的轉換(因為前導空白不是這些轉換的一部分。
  • 如果讀取的第一個字符與掃描集不匹配,或者空格后的第一個字符與標量轉換的格式不匹配,則為0
  • 否則它至少返回1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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