Return C 中 scanf 的值 EOF

Return value EOF of scanf in C

C语言的scanf,我对return值有点迷惑

说明书上写着:

    如果在第一次成功转换或匹配失败发生之前到达输入末尾,
  1. EOF 将被 returned。
  2. 如果发生读取错误,也会 return 编辑 EOF,在这种情况下会设置流的错误指示符。

首先,如果输入结束第一次成功转换或before匹配失败。这怎么可能?

其次,我不清楚读取错误和匹配失败的区别?

First, I am not sure what they mean by if the end of input is reached before the first successful conversion or before a matching failure occurs. How is that possible?

假设您正在尝试从文件中读取一个字符,而您位于文件的末尾。在任何成功的转换或匹配尝试发生之前,将达到输入的结尾。

Second, I am not sure the difference between read error and matching failure?

读取错误意味着您无法从 FILE 读取数据。匹配失败意味着您能够读取数据,但它与预期的不匹配(例如,读取 a 对应 %d。)

函数scanf()returns成功读取和转换的字段数。但是,如果我输入 (Windows) Ctrl-Z 作为输入,则表示 EOF。在Linux,我觉得可能是Ctrl-D?因此,如果您没有输入有意义的值,scanf() 表示以某种方式失败。

通常,您测试所需的输入数量,这也将涵盖 EOF 情况。

if (1 != scanf("%d", &i))
    printf ("No valid input\n");