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来判断是否跳出循环就可以啦!(问题解决了!开开心心睡觉~)
c语言int类型的变量输入一个字符出错的更多相关文章
- 编写Java程序,方法练习题__构建英雄类,定义一个int类型的变量output,表示英雄的血量
返回本章节 返回作业目录 需求说明: 定义一个int类型的变量output,表示英雄的血量,当battle()方法执行一次,output变量值减少10.在控制台随机输入一个小于100的整数,将该整数值 ...
- 假设程序需要一个int类型的变量来保持你所有的音乐CD的数量
假设程序需要一个int类型的变量来保持你所有的音乐CD的数量.初始值为0为该变量编写一条声明语句 int numCDs = 0;
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- 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; //这个语句 ...
- c/c++,输入一个字符 2014-11-20 07:00 30人阅读 评论(0) 收藏
getch().getche()和getchar()函数 (1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符.其调用格式为: getch(); ...
随机推荐
- Silence Removal and End Point Detection JAVA Code(音频删除静音与结束判断)
转载自:http://ganeshtiwaridotcomdotnp.blogspot.com/2011/08/silence-removal-and-end-point-detection_29.h ...
- 【计算机视觉】图像配准(Image Registration)
(Source:https://blog.sicara.com/image-registration-sift-deep-learning-3c794d794b7a) 图像配准方法概述 图像配准广泛 ...
- HTML布局排版2如何设置div总是相对于页面居中
由于浏览器页面有大有小,为了适应浏览器宽度,可以让div总是对于浏览器居中,设置div左右两边的margin为auto可以实现这个效果.如图,第一个是默认div,无上下左右外边距,第二个是设置了mar ...
- 【Leetcode_easy】908. Smallest Range I
problem 908. Smallest Range I solution: class Solution { public: int smallestRangeI(vector<int> ...
- CSS控制元素背景透明度总结
方法一:CSS3的background rgba filter:progid:DXImageTransform.Microsoft.gradient(enabled='true',startColor ...
- flask的信号使用
from blinker import Namespace from datetime import datetime from flask import request namespace = Na ...
- git和GitHub初级
使用方式: 一种是本地创建一个文档, 然后在github上创建一个仓库, 在上传上去 一种是从仓库下载代码, 然后在本地编辑, 然后在上传上去 第一种: 首先在linux上创建一个文档, mkdir ...
- 探索安卓热修复框架AndFix的奥秘
虽然阿里的AndFix框架已经出来很长时间了,但是还不了解它的同学依然挺多,接下来就跟着我一起来到AndFix的世界里一起看看,如何达到不用重新安装app就可以修复bug. 1.什么是AndFix? ...
- 一文带你全面了解RxJava
工作需要,刚好在学习 RxJava网络请求框架,网上搜了一些 关于RxJava 的教程,但都并不是很好理解,所幸最后找到了几篇有助于初学者了解 RxJava 的文章,于是结合自己的理解,重新整理成一篇 ...
- 用pytorch1.0搭建简单的神经网络:进行多分类分析
用pytorch1.0搭建简单的神经网络:进行多分类分析 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib ...