起因是做题的时候发现有些地方不太清楚,总结一下。
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();//换行符
}