OJ上scanf的输入问题
来源:互联网 发布:大蚂蚁软件 编辑:程序博客网 时间:2024/05/20 22:28
OJ上scanf的输入问题
关于scanf的使用,可以参考一下这篇博客
在OJ上的输入,以这个题目为例:
输入数据:
30 50*
输出数据:
1500
首先输入两个数字,然后在下一行输入一个字符,通常理我们会用如下方式输入:
int a, b;char c;scanf("%d%d", &a, &b);scanf("%c", &c);
但是当我们尝试输入的时候就会发现不对劲,刚刚输入完1 2
按下回车,程序就已经执行完了,是scanf("%c", &c);
没有执行吗?
其实并不是,当我们输出一下abc的值,就会发现,a、b分别为30、50,没有问题,而c的值却为’\n’,也就是说,c读入的其实是换行这个符号。
为什么会这样呢?我们把输入数据看做一个字符串,其实就是30 50\n*
,换行也只不过是一个符号而已。scanf中的%d%d匹配完两个数字之后,下一个字符就是’\n’,而此时scanf("%c", &c);
检测到’\n’,就将这个字符读入。
那么,要怎么解决这个问题呢?开头的那篇博客里就有解决方案,就是在"%d%d"
后面在加上一个空格或者’\n’等空白符,这样,scanf函数在匹配完数字后,会自动忽略掉后面的空白符号,直到有非空白符号被读入为止。
因此,对于这个题目,标准的解法应该是这样的:
#include <stdio.h>int main(){ int a,b; char ch; scanf("%d%d ",&a,&b); /* scanf("%d%d\n",&a,&b); 最后添加空格或者\r、\n都是可以的 */ scanf("%c",&ch); switch(ch) { case '+': printf("%d",a+b); break; case '-': printf("%d",a-b); break; case '*': printf("%d",a*b); break; case '/': printf("%d",a/b); break; } return 0;}
阅读全文
1 0
- OJ上scanf的输入问题
- OJ上scanf的输入问题
- Scanf函数的输入问题
- scanf的安全输入问题
- 在大端平台上scanf输入半字产生的内存覆盖问题调查
- scanf引出的输入缓冲区问题
- scanf读输入缓存引发的问题
- scanf输入时候的\n问题
- scanf输入格式的一些问题
- scanf输入字符和数字的问题
- scanf参数输入问题
- scanf输入数组问题
- scanf输入字符串问题
- scanf输入问题
- (就杭电oj上第二道A+B)论输入输入格式的问题
- c之关于输入 scanf 和其他输入的问题
- c之关于输入 scanf 和其他输入的问题
- c语言中scanf输入带空格的字符串以及scanf输入单个字符的问题
- 大数据经典学习路线(及供参考)
- 常用的一些记录
- Linux下浅谈静态库和动态库
- dubbo 源码学习笔记 (六) —— 集群模块
- 关于B
- OJ上scanf的输入问题
- 输出单个字符
- String 为什么是不可变的?
- [DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)
- dubbo 源码学习笔记 (七) —— 远程调用模块
- C 程序结构
- MySQL修改密码
- 普通用户centos6.3 如何安装cmake3.9.4
- sublime快捷键