记录C/C++scanf&cin输入误区

起因是做题的时候发现有些地方不太清楚,总结一下。

scanf如果输入的不是字符类型,他会忽略掉空格和回车,这一点和cin相同。

但是如果输入的是字符类型,他并不会忽略掉任何一个字符。

以下面这份样例举例。

复制代码
$ 9
 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
 @  @@@@@

我在输入这个数字9之后,如果通过scanf输入字符,那我第一个拿到的是'\n',第二个是' ',第三个是'@'。

如果我用cin,那第一个拿到的是'@',第二个拿到的也是'@',他不会管你变量是什么类型,只要是空格换行就吞了。

另外如果想舍弃掉回车,用C风格就是getchar(),C++风格是cin.get(),这俩作用一样,读取一个字符。

接着通过scanf正常读取即可。

上面样例的输入代码:

cpp 复制代码
	char zm;
	int r,c;
	scanf("%c",&zm);
	scanf("%d",&r);
	c=r;
	getchar();
	char x;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			scanf("%c",&x);
			cs[i][j]=x;
			if(cs[i][j]=='@'){
				cc[r-i+1][c-j+1]=zm;
			}else{
				cc[r-i+1][c-j+1]=' ';
			}
		}
		getchar();//换行符 
	}
相关推荐
水龙吟啸8 分钟前
数据结构与算法随机复习–Day1
数据结构·c++·算法
SilentSamsara14 分钟前
闭包的本质:Python 如何捕获自由变量
开发语言·python·青少年编程·pycharm
十五年专注C++开发26 分钟前
浅谈LLVM
开发语言·c++·qt·clang·llvm
白夜11171 小时前
C++(标签派发 Tag Dispatching)
开发语言·c++·笔记·算法
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之字符串 --【字符串基础】:凯撒密码
c++·字符串·csp·凯撒密码·高频考点·信奥赛·一等奖
CSCN新手听安1 小时前
【Qt】Qt窗口(六)QMessageBox消息对话框的使用
开发语言·c++·qt
会编程的土豆1 小时前
由c/c++速通go语言,新手必看
c语言·c++·golang
云泽8082 小时前
二叉树高阶笔试算法题精讲(二):非递归遍历与序列构造全解析
c++·算法·面试
爱看书的小沐2 小时前
【小沐学WebGIS】基于Cesium.JS与jsbsim联动三维飞行仿真(OpenGL、Cesium.js、Three.js)
c++·qt·three.js·opengl·cesium·jsbsim
CDN3602 小时前
[硬核] 你的DNS正在“裸奔”?用Python手撕DNS劫持与隧道检测逻辑
开发语言·网络·python