C中scanf的返回值EOF

时间:2015-04-14 21:22:08

标签: c eof

用C语言扫描,我对返回值有点困惑。

在说明中,它说:

  1. 如果在第一次成功转换或匹配失败发生之前到达输入结束,则返回EOF。
  2. 如果发生读取错误,也会返回EOF,在这种情况下会设置流的错误指示符。
  3. 首先,如果输入结束 第一次成功转换之前 之前匹配,我不确定他们是什么意思失败发生。怎么可能?

    其次,我不确定读错误和匹配失败之间的区别?

2 个答案:

答案 0 :(得分:3)

  

首先,如果在第一次成功转换之前或匹配失败发生之前达到输入结束,我不确定它们是什么意思。怎么可能?

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

  

其次,我不确定读错误和匹配失败之间的区别?

读取错误意味着您无法从FILE读取数据。匹配失败意味着您能够读取数据但与预期不符(例如,阅读a的{​​{1}}。)

答案 1 :(得分:1)

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

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

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