为了账号安全,请及时绑定邮箱和手机立即绑定

什么是C编程语言中的EOF?

什么是C编程语言中的EOF?

C
胡说叔叔 2019-07-30 15:13:54
什么是C编程语言中的EOF?你怎么看到最后一个印刷品?换句话说,EOF需要投入什么?我检查了定义,它说EOF是-1。如果你输入Ctrl-D,你将看不到任何东西。#include <stdio.h>int main() {  int c;  while((c = getchar() != EOF)) {   printf("%d\n", c);  }  printf("%d - at EOF\n", c);}
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

在Linux系统和OS X上,输入以导致EOF的字符是CtrlD。对于Windows,它是CtrlZ

根据操作系统的不同,此字符仅在一行中的第一个字符(即第一个字符)后才起作用Enter。由于控制台输入通常是面向行的,因此系统可能无法识别EOF字符,直到您使用了Enter

是的,如果该角色被识别为EOF,那么您的程序将永远不会看到实际的角色。相反,一个C程序将得到-1getchar()


查看完整回答
反对 回复 2019-07-30
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您应该将括号更改为

while((c = getchar()) != EOF)

因为“=”运算符的优先级低于“!=”运算符。然后你会得到预期的结果。你的表达等于

while (c = (getchar()!= EOF))

你得到两个1作为输出,因为你正在进行比较“c!= EOF”。这将始终成为您输入的字符的一个,然后通过点击返回后面的“\ n”。除了最后一次比较,其中c确实是EOF,它会给你一个0。

关于EOF的编辑:EOF通常为-1,但标准不保证这一点。该标准仅在7.19.1节中定义了EOF:

EOF扩展为整数常量表达式,类型为int和负值,由多个函数返回以指示文件结束,即不再有来自流的输入;

假设EOF等于-1是合理的,但是当使用EOF时,不应该测试特定值,而是使用宏。


查看完整回答
反对 回复 2019-07-30
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

EOF的值是一个负整数,以区别于0到255范围内的“char”值。它通常为-1,但它可以是任何其他负数......根据POSIX规范,所以你不应该假设它是-1。

^ D字符是您在UNIX / Linux上的控制台流中键入的内容,以告诉它逻辑上结束输入流。但在其他情况下(例如,当您从文件中读取时),它只是另一个数据字符。无论哪种方式,^ D字符(意味着输入的结尾)永远不会成为应用程序代码。

正如@Bastien所说,如果getchar()失败也会返回EOF 。严格来说,您应该调用ferrorfeof查看EOF是表示错误还是流结束。但在大多数情况下,无论哪种情况,您的应用程序都会做同样的事情


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 549 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信