3 回答
TA贡献1785条经验 获得超4个赞
在Linux系统和OS X上,输入以导致EOF的字符是Ctrl- D。对于Windows,它是Ctrl- Z。
根据操作系统的不同,此字符仅在一行中的第一个字符(即第一个字符)后才起作用Enter。由于控制台输入通常是面向行的,因此系统可能无法识别EOF字符,直到您使用了Enter。
是的,如果该角色被识别为EOF,那么您的程序将永远不会看到实际的角色。相反,一个C程序将得到-1
从getchar()
。
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时,不应该测试特定值,而是使用宏。
TA贡献1795条经验 获得超7个赞
EOF的值是一个负整数,以区别于0到255范围内的“char”值。它通常为-1,但它可以是任何其他负数......根据POSIX规范,所以你不应该假设它是-1。
^ D字符是您在UNIX / Linux上的控制台流中键入的内容,以告诉它逻辑上结束输入流。但在其他情况下(例如,当您从文件中读取时),它只是另一个数据字符。无论哪种方式,^ D字符(意味着输入的结尾)永远不会成为应用程序代码。
正如@Bastien所说,如果getchar()
失败也会返回EOF 。严格来说,您应该调用ferror
或feof
查看EOF是表示错误还是流结束。但在大多数情况下,无论哪种情况,您的应用程序都会做同样的事情
- 3 回答
- 0 关注
- 549 浏览
添加回答
举报