1、读入多行字符+数时,前面加个空格代替getchar(),节省大量时间
5
abcba
cin>>n;
getchar();//读空格
getline(cin,s);
2、读入多行字符+数时,前面加个空格代替getchar(),节省大量时间
m 1 2
m 2 3
c 2 3
scanf(" %c%d%d",&a,&b,&c)//读入多行字符+数时,前面加个空格代替getchar(),节省大量时间
3、未知行数数据输入。
一般用于输入未知个相同类型(int/float/double)的数值
int t; //t是你要输入的数据,可以是float、double等
while (cin>>t) //每输入一个就进行操作,注意数据之间应以空格隔开
{
//code
}
int t;
while (scanf("%d",&t)==1) //返回值个数是1.
{
//code
}
int t;
while (scanf("%d",&t)!=EOF) //while (~scanf("%d",&t))
{
//code
}
如果需要输入的是未知组数据,一行内容对应多个数值,仅需声明与组中包含的数值个数相当的数值类型,按上面的方法使用cin流进行输入,或者检测scanf的返回值是否与数值个数相等即可
需要注意的是这些方法在本地编译运行时不会自动结束输入,需要使用回车+Ctrl+Z来手动结束输入,但在OJ评测系统中不需要关注这些,是可以正常运行的。
4、未知行字符串输入。
有时候需要处理多个句子,每个字符串占一行,每条句子字符之间可能有空格,如果用上面的方法是无法完成的。
无论是cin>>string name还是scanf("%s",*char name)遇到空格都会停止读取,并不能读入完整的句子。
C++处理string类的方法是使用getline方法,使用方法如下
string s;
while (getline(cin,s))
{
//code
}
char s[];
while (gets(s))
{
//code
}
char s[]
while (scanf("%s",s)!=EOF)
{}
5、scanf读入字符数组,从下标k开始存
char a[1000];
scanf("%s",a+k);
6、读入带中间空格的字符数组,以内容不超200个为例
char a[210];
cin.getline(a+1,205);