C语言int接收字符发生了什么,c语言int类型的变量输入一个字符出错

今天遇到一个C语言的小问题,就是写一个简单的计算器,定义一个%f%c%f的三个变量,作2+3,2-3这种可以不断输入并输入“OFF”跳出循环的计算器功能,便会出现错误;

错误的示例代码如下:

#include

int main()

{

float x,y;

char z;

while(1)

{

scanf("%f%c%f",&x,&z,&y);

if(z==‘+‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x+y); }

else if(z==‘-‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x-y); }

else if(z==‘*‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x*y); }

else if(z==‘/‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x/y); }

else break;

}

}

912b262bab2e94b4ffeca47fc6f8b07f.png

它会不断执行上一步的结果,陷入死循环。。。。

经过查找资料发现错误是因为C语言中,由于你输入一个数字,系统会按照这个格式从缓冲区中读取掉这个数据但是如果你输入的字符,系统就会读取失败,这个字符还是留在缓冲区中,然后系统接着读,还是读取失败,这个字符永远留在缓冲区中,系统就永远的读不完用int,float 定义变量,采用scanf("%d")函数进行数据输入时,如果按下了非数字键,则scanf()函数会返回错误,即d==0;

利用这个特性,我们稍微修改一下程序,我们可以实现循环输入计算并且输入字符OFF时退出函数;

修改好的代码如下:

#include

int main()

{

int a=1,i=0,o=0;

float x,y;

char z;

int d;

while(1)

{

d=scanf("%f%c%f",&x,&z,&y);

if(d==0){printf("退出!");break;};

if(z==‘+‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x+y); }

else if(z==‘-‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x-y); }

else if(z==‘*‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x*y); }

else if(z==‘/‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x/y); }

}

//少写一行代码的方法

//while(d=scanf("%f%c%f",&x,&z,&y))

//{

//if(d==0){printf("退出!");break;};

//if(z==‘+‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x+y); }

//else if(z==‘-‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x-y); }

//else if(z==‘*‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x*y); }

//else if(z==‘/‘) {printf("%.2f%c%.2f=%.2f\n",x,z,y,x/y); }

//}

}

9ac6f7cb89392282c54e293a7777bdba.png

当scanf函数接收到字符串时,我们定义一个变量d来判断是否跳出循环就可以啦!(问题解决了!开开心心睡觉~)

原文:https://www.cnblogs.com/ma1998/p/12081862.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值