c语言int类型的变量输入一个字符出错
今天遇到一个C语言的小问题,就是写一个简单的计算器,定义一个%f%c%f的三个变量,作2+3,2-3这种可以不断输入并输入“OFF”跳出循环的计算器功能,便会出现错误;
错误的示例代码如下:
#include<stdio.h> 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; } }
它会不断执行上一步的结果,陷入死循环。。。。
经过查找资料发现错误是因为C语言中,由于你输入一个数字,系统会按照这个格式从缓冲区中读取掉这个数据但是如果你输入的字符,系统就会读取失败,这个字符还是留在缓冲区中,然后系统接着读,还是读取失败,这个字符永远留在缓冲区中,系统就永远的读不完 用int,float 定义变量,采用scanf("%d")函数进行数据输入时,如果按下了非数字键,则scanf()函数会返回错误,即d==0;
利用这个特性,我们稍微修改一下程序,我们可以实现循环输入计算并且输入字符OFF时退出函数;
修改好的代码如下:
#include<stdio.h> 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); } // } }
当scanf函数接收到字符串时,我们定义一个变量d来判断是否跳出循环就可以啦!(问题解决了!开开心心睡觉~)
代码成就万世基积沙镇海
梦想永在凌云意意气风发