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;
}
}
它会不断执⾏上⼀步的结果,陷⼊死循环。。。。
经过查资料发现错误是因为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); }
//}
}
当scanf函数接收到字符串时,我们定义⼀个变量d来判断是否跳出循环就可以啦!(问题解决了!开开⼼⼼睡觉~)
假设程序需要⼀个int类型的变量来保持你所有的⾳乐CD的数量
假设程序需要⼀个int类型的变量来保持你所有的⾳乐CD的数量.初始值为0为该变量编写⼀条声明语句 int numCDs = 0;
elementUi中input输⼊字符光标在输⼊⼀个字符后,光标失去焦点
elementUi中input输⼊字符光标在输⼊⼀个字符后,光标就退出,⽆法输⼊需要再次聚焦然后输⼊⼀个字符⼜再次退出 ⾸先,⽤elementUi正常⽤v-model绑定输⼊的值是不会造成光标退出的, ...
python 输⼊⼀个字符,是⼩写转换为⼤写,⼤写转换为⼩写,其他字符原样输出
s = input('请输⼊⼀个字符:') if 'a' <= s <= 'z': print(chr(ord(s) - 32)) elif 'A' <= s <= 'Z': ...
Java中如何输⼊⼀个字符
今天在QQ上看见有⼈问如何在Java中输⼊⼀个字符的问题. 查了下有以下三种⽅法吧: char c = new
java.util.Scanner(System.in).next().charAt( ...
java将int类型的变量转化成String类型的
第⼀种⽅法:String的valueOf⽅法,int i=5;String s=String.valueOf(i);第⼆种⽅法,直接在int后⾯加⼀个空的字符串,因为在java⾥⾯,默认任务int类型 ...
C语⾔的指针⽤法:输⼊⼀堆字符,把⾮字母的删去。
char *p,a[20]; int i; gets(a); //这个语句不同于getchar(),后者只能⼀次输⼊⼀个,⽽前者可以⼀次输完所有的字符 p=a; //这个语句 ...
Java中在实例化⼀个类时&comma;这个类中没有初始值的int类型成员变量i,i的值是不是0?
java中有两种类型⼀种是数值性,另⼀种是类变量数值性变量的初始值为0,类变量的初始化为null没做初始化成员变量int性变量是0, 在java 中有这么⼀条规则,声明在⽅法中的变量在使⽤时必须要初始化 ...
⾯向对象的特性-为String类型的变量扩展⼀个replaceAll(&rpar;函数————————————————————————————
随机推荐
iOS设置分割线从边框顶端开始
好⽅法,本来是在xib⾥⾯设置⾃定义分割线位置,结果还是差15像素,该⽅法亲测好使. IOS8 设置TableView Separatorinset 分割线从边框顶端开始 (转) 在ios8上 [Ta ...
CentOS下添加新硬盘
1.查看新硬盘 #fdisk –l 新添加的硬盘的编号为/dev/sdb
2.硬盘分区 1)进⼊fdisk模式 #/sbin/fdisk /dev/sdb 2)输⼊n进⾏分 ...
MY_Log,⽆缝替换原⽣Log,⽀持⽇志输出到⽂件、FirePHP
⾃⼰扩展了⼀个MY_Log, ⽤法类似于log4j,⽬前⽀持将⽇志输出到⽂件.FirePHP.如果你需要将⽇志输出到其他地⽅,⽐如邮件.数据库等,可以很⽅便地进⾏扩展. ⽤法很简单,⼤家⼀看就知道.1 ...
&lbrack;原创]SQL SERVER 2008R2 技术总结专题⽬录索引
前⾔: 在⼯作中使⽤了SQL SERVER 2008R2已经很长⼀段时间了,⼯作中⾃⼰也有个蛮好的习惯:总是喜欢将碰到的⼀些问题.技术⽅案等记录下来,现在越积越多,最近也⽐较轻松了,准备整理 ...
APP中数据加载的6种⽅式-b
我们看到的APP,往往有着华丽的启动界⾯,然后就是漫长的数据加载等待,甚⾄在⽆⽹络的时候,整个处于不可⽤状态.那么我们怎么处理好界⾯交互中的加载设计,保证体验⽆缝衔接,保证⽤户没有漫长的等待感,⽽可以 ...
EventBus的使⽤,初学EventBus传值
⼀.概述 EventBus是⼀款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在
Fragment,Activity,Service,线程之间 ...
[Windows Phone] 地图覆叠层控制项(MapOverlay )
c++string类型原⽂:[Windows Phone] 地图覆叠层控制项(MapOverlay ) 前⾔ 当使⽤地图时,我们可能需要定位⼀些座标图⽰或是绘制⼀些⽂字线条,这时可以在地图上加上覆叠层进⾏绘制,在 Wind ...
从线性模型(linear model)衍⽣出的机器学习分类器(classifier)
1. 线性模型简介 0x1:线性模型的现实意义 在⼀个理想的连续世界中,任何⾮线性的东西都可以被线性的东西来拟合(参考Taylor Expansion 公式),所以理论上线性模型可以模拟物理世界中的绝⼤ ...
[Vuex] Use Namespaces in Vuex Stores using TypeScript
Even by using modules, they still share the same namespace. So you couldn’t have the same mutation n ...
Hadoop: Add third-party libraries to MapReduce job
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论