记录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();//换行符 
	}
相关推荐
zgl_2005377913 分钟前
ZGLanguage 解析SQL数据血缘 之 提取select语句中的源表名
大数据·数据库·c++·数据仓库·sql·数据库开发·etl
Sereinc.Y19 分钟前
【移动机器人运动规划(ROS)】03_ROS话题-服务-动作
c++·动态规划·ros·slam
一只鹿鹿鹿24 分钟前
网络信息与数据安全建设方案
大数据·运维·开发语言·网络·mysql
a努力。26 分钟前
国家电网Java面试被问:慢查询的优化方案
java·开发语言·面试
Dillon Dong40 分钟前
从C到Simulink: ARM Compiler 5 (RVDS) 为什么simulink 不能使用arm编译
c语言·arm开发·simulink
@小码农41 分钟前
202512 电子学会 Scratch图形化编程等级考试四级真题(附答案)
java·开发语言·算法
ejjdhdjdjdjdjjsl1 小时前
C#类型转换与异常处理全解析
开发语言·c#
qq_336313931 小时前
java基础-IO流(转换流)
java·开发语言·python
小宇的天下1 小时前
Calibre nmDRC 运行机制与规则文件(13-2)
运维·开发语言
扶苏-su1 小时前
Java---IO流原理和分类
java·开发语言