我们在写 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 输入加逗号(或者不加逗号)出现的异常及解决方案相关推荐

  1. Which前加逗号与不加逗号有什么区别

    Which 引导非限制性定语从句时,前面要加逗号,引导限制性定语从句时就不能加逗号. Which的用法: 关系代词which的用法 在非限定性定语从句中,只宜用which, 不宜用that. Beij ...

  2. c语言逗号占几个字符,C语言 scanf输入多个数字只能以逗号分隔的操作

    C之scanf输入多个数字只能以逗号分隔,而不能用空格 TAB空白符分隔 #include int main() { int num_max(int x,int y,int z); int a,b,c ...

  3. 技巧:给excel某列数据加双引号和逗号,用于sql中in()查询

    配套视频笔记:https://www.bilibili.com/video/BV1iG4y1U7r2 背景 就是需求给过来一个excel,我们要用其中的某一列作为条件去查询数据库,删数据或者改数据. ...

  4. 封装js千分位加逗号和删除逗号

    //封装js千分位加逗号和删除逗号alert( format(2545678754.020001) ) //2,545,678,754.03alert( format(-2545678754.0200 ...

  5. 批量在行首或行尾加单引号、逗号(3种方法)

    方法一:Excel使用公式: 只单纯加单引号: ="'"&A1&"'" 加单引号和逗号: ="'"&A1&& ...

  6. 【题目49:装快递(C++) ; ps:输入一行数据(带逗号或空格)更好的输入方式】

    /* 一辆运送快递的货车.运送的快递均放在大小不等的长方形快递盒中 为了能够装载更多的快递 同时不能让货车超载 需要计算最多能装多少个快递 快递的体积不受限制 快递数量最多1000个 货车载重量500 ...

  7. 猜字游戏2,使用JSP+Servlet的形式编写程序,用户输入5个整数,逗号隔升,和预测值进行比较,如果5个随时数中包含预测值,则显示“恭喜你猜对了,预测值是*”

    使用JSP+Servlet的形式编写程序,用户输入5个整数,逗号隔升,和预测值进行比较,如果5个随时数中包含预测值,则显示"恭喜你猜对了,预测值是*",否则显示"*个数小 ...

  8. scanf输入参数详解

    scanf函数返回成功读入的数据项数,读入数据时遇到了"文件结束"则返回EOF. 如: 1 scanf ( "%d %d" ,&a,&b); 函 ...

  9. 有关scanf输入的问题

    /*while(scanf("%d",&t),t) 这句话的意思是,输入一个整数t,如果输入的数非零,则执行while循环. 这个是逗号运算符,取决于t的值 ( scanf ...

最新文章

  1. React 父组件给子组件传值,子组件接收
  2. [Tkinter 教程] 布局管理 (Pack Place Grid)
  3. AI时代!我选Python因为Python是人工智能的未来
  4. ONENET平台简介及简单的接入方法
  5. C#3.0新特性 和 Javascript
  6. Python Tricks(十三)—— 欧几里得算法
  7. 用友nc系统服务器端口号,用友NC数据库服务器参数配置说明
  8. (短除法)求两个给定正整数的最大公约数和最小公倍数。
  9. 《东周列国志》第八十四回 智伯决水灌晋阳 豫让击衣报襄子
  10. Primary主类和Catagory分类都存在相同事件
  11. javascript 中Object.entries
  12. w7系统计算机搜索无法搜索了,win7系统在搜索框中输入文字后无法搜索的详细教程...
  13. ffmpeg js转换音频_微信FFMPEG 扩展转换音频格式
  14. 值得学习的C/C++开源项目
  15. 地球形状与重力场模型
  16. 动画练习:Punch
  17. 斐讯N1 docker安装opernwrt,当做旁路由
  18. 去重的几种方法(部分)
  19. 【CS论坛】安全风险评估的3种错误方式
  20. 如何安装Ruby和RubyGems

热门文章

  1. linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播
  2. leetcode143 重排链表
  3. 串的定长存储表示【数据结构】
  4. C++:21---仿函数
  5. 《Python Cookbook 3rd》笔记(3.10):矩阵与线性代数运算
  6. 北大青鸟java y2_Struts-2 北大青鸟 Y2学年 项目案例使用 2框架开发租房网站 Java Develop 249万源代码下载- www.pudn.com...
  7. 安装ipfs-http-client出现constants@0.1.2 install: node build.js > index.browser.js错误的解决办法
  8. codeforces 50A-C语言解题报告
  9. 女性开车5大安全驾车好习惯 为您支招
  10. ICMP (互联网控制消息协议 )是什么