如果要输入一串数字,以空格为分隔,以换行为结束,然后对数字进行排序等操作。最简单的办法就是用C语言分别存int和char,这个char表示分隔符,分隔符是空格,或者逗号都是可以的。
int a,i=0,t[100];
char c='0';
while(c!='\n')
{
scanf("%d",&a);
t[i++]=a;
scanf("%c",&c);
}
for (int j = 0;j<i;j++)
printf("%d ",t[j]);
但是注意在这里如果改成cin是无法成功的,因为cin是不识别回车。如果用C++,我们可以考虑string来转换。用getline得到一个字符串,然后把字符串转成int。getline满足输入的规则,以回车结束。
int t[100];
string str;
getline(cin,str);
cout<<str<<endl;
int j=0;
for(int i = 0; i<str.length(); i++)
{
if(str[i]!=' ')
{
t[j] = (str[i])-'0';
cout<<t[j++]<<endl;
}
}
当然也可以用char a[100];gets(a);来获得一行数据。
读入一行数据 进阶
用getline函数,输入一个流对象,一个string对象。从输入流的下一行开始读取,并把结果保存到string对象当中。这时会得到一行数据并换行就输出。但这时并没有输出hello,只有输入文件结束时才跳出循环。
string line;
while(getline(cin,line))
cout<<line<<endl;
cout<<"hello!"<<endl;
为了让循环能在检测到某些特殊输入时退出,下面的例子给出了当buf中为ENDOFINPUT时就退出
#include<iostream>
#include<cctype>
#include<string>
#define MAX 1000 + 10
using namespace std;
string buf;
int main()
{
int i;
string fs,fe,fend;
fs = "START";
fe = "END";
fend = "ENDOFINPUT";
while(getline(cin,buf))
{
if(buf == fs || buf == fe)
{
//getline(cin,buf);
continue;
}
if(buf == fend)
break;
for(i = 0; i < buf.length(); i++)
{
if(isalpha(buf[i]))
buf[i] = (buf[i] - 'A' + 21) % 26 + 'A';
}
cout << buf << endl;
//getline(cin,buf);
}
return 0;
}
输入的格式是
START
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
END
START
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
END
START
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
END
ENDOFINPUT
输出的格式是
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME
DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE
char buf[MAX],fs[15] = "START",fe[15] = "END",fend[15] = "ENDOFINPUT";
int i;
//while(fgets(buf,sizeof(buf),stdin))
while(gets(buf))
{
if( strcmp(buf,fs) == 0 || strcmp(buf,fe) == 0 )
continue;
if(strcmp(buf,fend) == 0)
break;
i = 0;
while(buf[i] != '\0')
{
if(isalpha(buf[i]))
printf("%c",(buf[i] - 'A' + 21) % 26 + 'A');
else
printf("%c",buf[i]);
i++;
}
printf("\n");
//printf("%s\n",buf);
}