在使用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}