关于scanf读入字符的问题
  • 板块学术版
  • 楼主__qlzxlyc41__
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/8/25 16:55
  • 上次更新2023/10/27 13:42:58
查看原帖
关于scanf读入字符的问题
669527
__qlzxlyc41__楼主2022/8/25 16:55

rt,刚学的时候我就发现一个 scanf 读入字符的一个很奇怪的问题。一般来说,读入字符应该是 scanf("%c",&c); 这样来读入。但是这样读入很多时候会出现一行读入了一行没读入下一行又读入了的问题。

举个例子,这个代码读入以下数据,输出来是正常的。

5 5
23333
11451
kkksc
chen_
pinkr
#include<bits/stdc++.h>
using namespace std;
char a[105][105];
int n,m;
int main()
{
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin >> a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout << a[i][j];
		}
		cout << endl;
	}
	return 0;
}

但是这个代码就会输出很奇怪的东西。

#include<bits/stdc++.h>
using namespace std;
char a[105][105];
int n,m;
int main()
{
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%c",&a[i][j]);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout << a[i][j];
		}
		cout << endl;
	}
	return 0;
}

但是在 %c 之前加上一个 \n 就好了。

现在的问题是,比赛时直接 scanf 会这样吗,前面要加 \n 吗?

感谢大佬的回答,谢谢。

2022/8/25 16:55
加载中...