scanf 输入加逗号(或者不加逗号)出现的异常及解决方案
我们在写 C 语言代码通常 scanf 的格式控制部分都有两种习惯,加逗号与不加逗号,而这两种情况都会因为我们的不同输入习惯产生一定的问题,这里给出另一种方法。
1、不加逗号
#include<stdio.h> #define SWAP(a, b) a=a^b;b=a^b;a=a^b; void main()
{
int num1, num2;
printf("Input num1 and num2:");
scanf("%d%d", &num1, &num2);
SWAP(num1, num2);
printf("After the exchange:%d,%d\n",num1,num2);
}
下面这是3种不同的输入方式以及相应的输出结果
1.1用空格隔开两个变量

1.2用回车换行隔开

1.3用逗号隔开

我们可以发现前两种都没什么问题,而第三种就不是我们想要的结果了。
2、加逗号
#include<stdio.h> #define SWAP(a, b) a=a^b;b=a^b;a=a^b; void main()
{
int num1, num2;
printf("Input num1 and num2:");
scanf("%d,%d", &num1, &num2);
SWAP(num1, num2);
printf("After the exchange:%d,%d\n",num1,num2);
}
2.1用空格隔开

2.2用回车换行隔开

2.3用逗号隔开

巧的是,这次刚好和第一种相反,前两个都和预期不一样,第三个是我们要的。
3、解决方案
#include<stdio.h> #define SWAP(a, b) a=a^b;b=a^b;a=a^b; void main()
{
int num1, num2;
printf("Input num1 and num2:");
scanf("%d%*c%d", &num1, &num2);
SWAP(num1, num2);
printf("After the exchange:%d,%d\n",num1,num2);
}
接下来看看这次的结果。
3.1空格隔开

3.2回车换行隔开

3.3逗号隔开

我们惊喜地发现这次 3 种输入方式都是我们想要的结果了。
4、说明
scanf 要求输入的格式必须与自己设定的保持一致,1 和 2 的代码之所以会报错就是因为输入和设定的不一样。而在 3 的代码中,%*c 充当了一个提取我们分割变量的一个容器,可以把我们输入的各种分割字符都提取出去,所以 3 种输入方式都正常了。
ps:这种方法不适合两个变量都是字符串
作者:耑新新,发布于 博客园
转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com
scanf 输入加逗号(或者不加逗号)出现的异常及解决方案的更多相关文章
- 封装js千分位加逗号和删除逗号
//封装js千分位加逗号和删除逗号 alert( format(2545678754.020001) ) //2,545,678,754.03 alert( format(-2545678754.02 ...
- notepad++给每一列数据加单引号及逗号结尾
原始数据: 对列操作--先加前引号(光标放在第一行哦):编辑-->列块编辑 再加后引号和逗号(文本尾端不齐,就用替换): 打开替换窗口:ctrl+F(其实就是查找) 加完引号和逗号效果:(如果最 ...
- 函数基础重点掌握内容:创建函数、return返回单个值、return返回多个值、函数名加括号与不加括号的区别
##比较两个数大小 #有参函数!!! def compare(s,t): if s > t: print(s) else: print(t) f=compare compare(1000,30) ...
- onclick时间加return和不加return的区别
JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...
- 哦这。。!C语言scanf输入的坑爹之处
一. 今天闲来无事,跑去A题,本想3sA了poj1004,结果搞了10分钟,最令人困惑的问题就是为什么定义了double类型的变量,但是用scanf输入的时候标识符用%f的话,输入并不能完成,也就是说 ...
- 网站域名加WWW与不加WWW区别
不知道站长童鞋们有没有注意到,很多网站在打开时,地址栏里的域名有的带有“www.”,而有的网站前面则没有带“www.”这其中有什么区别呢?作为一个新站长,我什么都不懂,就在百度上搜了一艘,也没找到一个 ...
- new对象时,类名后加括号与不加括号的区别
[1]默认构造函数 关于默认构造函数,请参见随笔<类中函数> 请看测试代码: 1 #include <iostream> 2 using namespace std; 3 4 ...
- C++中创建对象的时候加括号和不加括号的区别
c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...
- 测试scanf输入含非法控制符
心得: 学到scanf命令时第一个想到的就是可以利用scanf做一个十进制转16进制.八进制的小程序,很天真的以为也可以转二进制,在搜索字符控制符的时候才知道原来没有二进制的控制字符,需要换算出来得出 ...
随机推荐
- SpringMVC处理ajax请求的跨域问题和注意事项
.首先要知道ajax请求的核心是JavaScrip对象和XmlHttpRequest,而浏览器请求的核心是浏览器我的个人博客(基于SSM,Redis,Tomcat集群的后台架构) github:htt ...
- Tomcat如何开启SSL配置(https)
一.创建证书 证书用于客户端与服务端安全认证.我们可以使用JDK自带的keytool工具来生成证书.真正在产品环境中使用肯定要去证书提供商去购买,证书认证一般都是由VeriSign认证,官方地址:ht ...
- 【数论Day1】 最大公约数(gcd)题目
20170529-3数论_gcd 题解: http://www.cnblogs.com/ljc20020730/p/6919116.html 日期 序号 题目名称 输入文件名 输出文件名 时限 内存 ...
- Django入门项目实践(下)
5.设置应用程序的样式 安装django-bootstrap3. # untitled/untitled/settings.py # ··· INSTALLED_APPS = [ 'django.co ...
- SQL Server 执行计划的理解
要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的. ...
- ubuntu 下 python模块 mysql-python安装(转)
原文:http://www.cnblogs.com/51kata/p/5406468.html 直接运行如下命令 sudo pip install MySQL-python 报如下错误 xxx@ubu ...
- Scala进阶之路-Scala的基本语法
Scala进阶之路-Scala的基本语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数式编程初体验Spark-Shell之WordCount var arr=Array( ...
- 手机安全卫士-——Splash总结
1.在AndroidManifest.xml文件的application中配置,应用的主题:不带标题的主题 android:theme="@android:style/Theme.Black ...
- python---django中models配置修改数据库引擎
Django支持多种数据库,sqlite,mysql,oracle等,其默认数据库是sqlite 在settings文件中可以发现: DATABASES = { 'default': { 'ENGIN ...
- 35个java代码性能优化总结
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用 ...