C/C++输入未知组数据的方法,多行输入介绍
在使用C语言/C++在各大OJ平台上做题时,可能会遇到需要输入未知个数/行数的数据的情况,下面就来看一看如何进行输入吧。
一、未知个数值变量的输入
一般用于输入未知个相同类型(int/float/double)的数值
下面的代码既可以实现一行数据的输入,也可以用于多行数据的输入
c++代码
int t; //t是你要输入的数据,可以是float、double等
while (cin>>t) //每输入一个就进行操作,注意数据之间应以空格隔开
{
//code
}
c代码
scanf函数的返回值是接收的数据的个数,可以利用这个特点来进行输入
int t;
while (scanf("%d",&t)==1)
{
//code
}
或者使用EOF方法 (OJ中评测的都是文件)
int t;
while (scanf("%d",&t)!=EOF) //while (~scanf("%d",&t))
{
//code
}
如果需要输入的是未知组数据,一行内容对应多个数值,仅需声明与组中包含的数值个数相当的数值类型,按上面的方法使用cin流进行输入,或者检测scanf的返回值是否与数值个数相等即可
需要注意的是这些方法在本地编译运行时不会自动结束输入,需要使用回车+Ctrl+Z来手动结束输入,但在OJ评测系统中不需要关注这些,是可以正常运行的。
二、未知行字符串类型的输入
有时候需要处理多个句子,每个字符串占一行,每条句子字符之间可能有空格,如果用上面的方法是无法完成的。
无论是cin>>string name还是scanf("%s",*char name)遇到空格都会停止读取,并不能读入完整的句子。
C++处理string类的方法是使用getline方法,使用方法如下
string s;
while (getline(cin,s))
{
//code
}
C中可以用gets()读取字符数组
char s[];
while (gets(s))
{
//code
}