用反汇编理解puchar()、getchar()、EOF

本文深入解析putchar()与getchar()函数的使用,以及EOF在输入流结束判断中的作用。通过代码实例,展示了如何利用getchar()读取字符,并通过EOF标志实现循环终止,同时解释了字符与ASCII码之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于putchar()看图即可理解
 
getchar()接收的是字符
比如
 
int c;
c = getchar();
此时你输入的东西,getchar都认为它是字符
就算你输入1,getchar接收的是'1'
但getchar()返回的是int整型
 
int c;
c = getchar();
printf("%d", c);
 
int c;
c = getchar();
putchar();
此时的putchar() = printf("%c " ,c)

 

关于EOF,我现在也是大理解,就把他当成#define EOF -1 理解就好
 
下面给一段代码
int main()
{

       long nc;

       nc = 0;
       while (getchar() != EOF)
              ++nc;
       printf("%ld\n", nc);

       system("pause");
       return 0;
}

 

解释下整个逻辑:
首先,定义一个长整型nc,并给他赋予初始值0
现在来写一个循环,整个循环的条件是,只要getchar() != EOF 就执行循环体
比如,我们输入A,getchar()其实返回的是其对应的ASCII码(int整型)65,
自然是不等于EOF(-1)的,那么就执行整个循环体, ++nc ,也就是nc = nc + 1 = 0 + 1 = 1;
只要我们不停地在getchar()里传入数据,他就会不断地执行
我们刚刚输入了A,也就是65,执行循环体,nc = nc + 1 = 0 + 1 = 1;
再继续输入B,也就是66,执行循环体,nc = nc + 1 = 1 + 1 = 2;
再继续输入C,也就是67,执行循环体,nc = nc + 1 = 2 + 1 = 3;
我们要退出循环要Ctrl+Z,但这个操作也算是操作符,具体是多少可以自己test下
执行循环体 nc = nc + 1 = 3 + 1 = 4;
最后的结果是4.
 
执行结果表明我上面的说法是错误的,为了了解到底怎么回事,我特意OD了下
1.执行到了getchar那,我们来输入A  // 

 

 
posted on 2018-08-07 09:37  田安Anne 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/EvilAnne/p/9435160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值