网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月14日
漏签
0
天
c语言吧
关注:
799,021
贴子:
4,353,712
看贴
图片
吧主推荐
视频
游戏
3
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
关于c语言在操作系统的问题
只看楼主
收藏
回复
1325134sdesad
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我现在学到c primer plus第八章说在大多数UNIX和Linux系统中,Ctrl+D会传输文件结尾信号。
我寻思着为什么,于是在网上查到但Ctrl+D实质代表了EOF值。
于是我在我的程序中使用了它,但发现它会不停地打印乱码,反正我也不知道是啥。
我稍微思考了一下,也许当EOF值被getchar()返回了个不等于EOF的值导致其不停地打印才产生的乱码。
因此我想问问,getchar()当时返回了啥😳?
XeO2
马猴烧酒
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
getchar的返回值是int类型的;
EOF是实现定义的int类型常量;
所以可以定义一个int类型的变量来接收getchar的返回值,然后打印出来;
EOF的值也可以打印出来,像这样:printf("%d\n",EOF);
结果在不同平台上可能是不同的,没必要深究其意义
aaaaaaa421
马猴烧酒
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
树莓派论坛上有相关帖子:
https://forums.raspberrypi.com/viewtopic.php?t=146335
个人分析:树莓派使用 ARM 指令集,而在 ARM 编译器中,char 默认使用 unsigned 版本实现,这意味着输入 EOF 时 ch 的值为 255,而与 EOF 比较的过程涉及整型提升,提升后的实际比较变为了 255 != -1,明显成立,于是会出现你图中的问题。解决方法很简单:如 2 楼所说,使用 int ch,这也是所有标准库函数采用的方式。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示