记录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();//换行符 
	}
相关推荐
我是一颗柠檬13 小时前
【JDK8新特性】函数式接口Day2
java·开发语言·后端·intellij-idea
计算机安禾13 小时前
【c++面向对象编程】第45篇:萃取(Traits)技术与策略类:STL源码中的智慧
开发语言·c++
运筹vivo@13 小时前
3043. 最长公共前缀的长度(Leetcode 每日一题)
c++·算法·leetcode·职场和发展·每日一题
Highcharts.js15 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
测试员周周19 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
杜子不疼.1 天前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号31 天前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia1 天前
Qt——编辑交互功能的实现
开发语言·qt
石山代码1 天前
C++ 内存分区 堆区
java·开发语言·c++
无风听海1 天前
C# 隐式转换深度解析
java·开发语言·c#