为什么类型int需要处理EOF并返回getchar()?

时间:2018-02-19 16:54:23

标签: c getchar

正如书中所写 -

问题在于区分输入结束和有效数据。解决方案是当没有更多输入时,getchar返回一个独特的值,这个值不能与任何真实字符混淆。该值称为EOF,用于"文件末尾。"我们必须声明c是一个足够大的类型,以保存getchar返回的任何值。我们不能使用char,因为除了任何可能的char之外,c必须足够大以容纳EOF。因此我们使用int。

 <Button HorizontalAlignment="Center" MinHeight="32" MinWidth="120" Foreground="Black" Background="White" Margin="0,10,0,0" Content="Login" FontWeight="Bold" BorderThickness="2"
                x:Name="BtnClk" Command="{Binding navigationCandidates }"/>

我无法理解使用int而不是char的实际原因。 EOF将返回的内容不能存储在char中。

1 个答案:

答案 0 :(得分:3)

char可以容纳256个不同的值(0到255)。如果EOFchar,那么EOF的值将是0到255之间的某个值,这意味着您将有一个字符无法阅读。因此EOF的值不能介于0到255之间,这意味着它不能适合char,这意味着它的类型必须大于char,例如int 1}}。

换句话说,EOF 一个char,我们不想将其存储在char中。它的唯一目的是使程序能够检测到文件末尾之外的一个字符串已被尝试读取。

或者换句话说:假设EOF被定义为255,因此适合char。现在让我们假设getchar返回值255(即EOF)。现在这个价值代表什么?它是EOF还是字符255?