scanf 输入加逗号(或者不加逗号)出现的异常及解决方案
我们在写 C 语言代码通常 scanf 的格式控制部分都有两种习惯,加逗号与不加逗号,而这两种情况都会因为我们的不同输入习惯产生一定的问题,这里给出另一种方法。
1、不加逗号
1 #include<stdio.h> 2 3 #define SWAP(a, b) a=a^b;b=a^b;a=a^b; 4 5 void main() 6 { 7 int num1, num2; 8 printf("Input num1 and num2:"); 9 scanf("%d%d", &num1, &num2); 10 SWAP(num1, num2); 11 printf("After the exchange:%d,%d\n",num1,num2); 12 }
下面这是3种不同的输入方式以及相应的输出结果
1.1用空格隔开两个变量
1.2用回车换行隔开
1.3用逗号隔开
我们可以发现前两种都没什么问题,而第三种就不是我们想要的结果了。
2、加逗号
1 #include<stdio.h> 2 3 #define SWAP(a, b) a=a^b;b=a^b;a=a^b; 4 5 void main() 6 { 7 int num1, num2; 8 printf("Input num1 and num2:"); 9 scanf("%d,%d", &num1, &num2); 10 SWAP(num1, num2); 11 printf("After the exchange:%d,%d\n",num1,num2); 12 }
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@foxmail.com
转载于:https://www.cnblogs.com/Amedeo/p/8972143.html
scanf 输入加逗号(或者不加逗号)出现的异常及解决方案相关推荐
- Which前加逗号与不加逗号有什么区别
Which 引导非限制性定语从句时,前面要加逗号,引导限制性定语从句时就不能加逗号. Which的用法: 关系代词which的用法 在非限定性定语从句中,只宜用which, 不宜用that. Beij ...
- c语言逗号占几个字符,C语言 scanf输入多个数字只能以逗号分隔的操作
C之scanf输入多个数字只能以逗号分隔,而不能用空格 TAB空白符分隔 #include int main() { int num_max(int x,int y,int z); int a,b,c ...
- 技巧:给excel某列数据加双引号和逗号,用于sql中in()查询
配套视频笔记:https://www.bilibili.com/video/BV1iG4y1U7r2 背景 就是需求给过来一个excel,我们要用其中的某一列作为条件去查询数据库,删数据或者改数据. ...
- 封装js千分位加逗号和删除逗号
//封装js千分位加逗号和删除逗号alert( format(2545678754.020001) ) //2,545,678,754.03alert( format(-2545678754.0200 ...
- 批量在行首或行尾加单引号、逗号(3种方法)
方法一:Excel使用公式: 只单纯加单引号: ="'"&A1&"'" 加单引号和逗号: ="'"&A1&& ...
- 【题目49:装快递(C++) ; ps:输入一行数据(带逗号或空格)更好的输入方式】
/* 一辆运送快递的货车.运送的快递均放在大小不等的长方形快递盒中 为了能够装载更多的快递 同时不能让货车超载 需要计算最多能装多少个快递 快递的体积不受限制 快递数量最多1000个 货车载重量500 ...
- 猜字游戏2,使用JSP+Servlet的形式编写程序,用户输入5个整数,逗号隔升,和预测值进行比较,如果5个随时数中包含预测值,则显示“恭喜你猜对了,预测值是*”
使用JSP+Servlet的形式编写程序,用户输入5个整数,逗号隔升,和预测值进行比较,如果5个随时数中包含预测值,则显示"恭喜你猜对了,预测值是*",否则显示"*个数小 ...
- scanf输入参数详解
scanf函数返回成功读入的数据项数,读入数据时遇到了"文件结束"则返回EOF. 如: 1 scanf ( "%d %d" ,&a,&b); 函 ...
- 有关scanf输入的问题
/*while(scanf("%d",&t),t) 这句话的意思是,输入一个整数t,如果输入的数非零,则执行while循环. 这个是逗号运算符,取决于t的值 ( scanf ...
最新文章
- React 父组件给子组件传值,子组件接收
- [Tkinter 教程] 布局管理 (Pack Place Grid)
- AI时代!我选Python因为Python是人工智能的未来
- ONENET平台简介及简单的接入方法
- C#3.0新特性 和 Javascript
- Python Tricks(十三)—— 欧几里得算法
- 用友nc系统服务器端口号,用友NC数据库服务器参数配置说明
- (短除法)求两个给定正整数的最大公约数和最小公倍数。
- 《东周列国志》第八十四回 智伯决水灌晋阳 豫让击衣报襄子
- Primary主类和Catagory分类都存在相同事件
- javascript 中Object.entries
- w7系统计算机搜索无法搜索了,win7系统在搜索框中输入文字后无法搜索的详细教程...
- ffmpeg js转换音频_微信FFMPEG 扩展转换音频格式
- 值得学习的C/C++开源项目
- 地球形状与重力场模型
- 动画练习:Punch
- 斐讯N1 docker安装opernwrt,当做旁路由
- 去重的几种方法(部分)
- 【CS论坛】安全风险评估的3种错误方式
- 如何安装Ruby和RubyGems
热门文章
- linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播
- leetcode143 重排链表
- 串的定长存储表示【数据结构】
- C++:21---仿函数
- 《Python Cookbook 3rd》笔记(3.10):矩阵与线性代数运算
- 北大青鸟java y2_Struts-2 北大青鸟 Y2学年 项目案例使用 2框架开发租房网站 Java Develop 249万源代码下载- www.pudn.com...
- 安装ipfs-http-client出现constants@0.1.2 install: node build.js > index.browser.js错误的解决办法
- codeforces 50A-C语言解题报告
- 女性开车5大安全驾车好习惯 为您支招
- ICMP (互联网控制消息协议 )是什么