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
}