总的来说,主要分为3种情况
输入的测试样例有多组,每组需要相同逻辑的处理;
处理方案:在C语言中可利用scanf(“%d”,&n)!=EOF,在C++中可以使用while(cin>>n)。
例如:计算两数之和,输入可能有多组样例。
#include <iostream>
using namespace std;
int main(){
int a,b;
while(scanf("%d %d",&a,&b)!=EOF){
cout<<a+b<<endl;
}
return 0;
}
或者使用C++的写法:
#include <iostream>
using namespace std;
int main(){
int a,b;
while(cin>>a>>b){
cout<<a+b<<endl;
}
return 0;
}
结果是这样的:
3 4
7
1 2
3
3 9
12
当输入一个数组时,无法确定其长度时,通过输入换行符结束输入。
处理方案:在C语言中可利用getchar(),在C++中可以使用cin.get()。两者都表示从stdio流中读一个字符,也就是说从控制台中读取下一个字符。
例如:输入一个整型数组,再按序输出,注意没有给定输入数组的长度。
#include <iostream>
using namespace std;
int main(){
int A[100];
int i = 0;
while(cin>>A[i] && getchar()!='\n'){
i += 1;
}
for(int j=0;j<i+1;j++)
cout<<A[j]<<endl;
return 0;
}
C++的写法:
#include <iostream>
using namespace std;
int main(){
int A[100];
int i = 0;
while(cin>>A[i] && cin.get()!='\n'){
i += 1;
}
for(int j=0;j<i+1;j++)
cout<<A[j]<<endl;
return 0;
}
如果不确定数组长度的上界,可以采用动态数组vector来实现;
处理字符串的情况,在C++中因为支持了string类型,所以大大简化了关于字符串的一系列操作;
方案:处理连续非空的字符串,我们只要输入即可cin>>str;
#include <iostream>
using namespace std;
int main(){
string str;
cin>>str;
cout<<str<<endl;
return 0;
}
例如
helloworld
helloworld
对于字符串中含有空格的情况,使用getline函数实现;
#include <iostream>
using namespace std;
int main(){
string str;
getline(cin,str);
cout<<str<<endl;
return 0;
}
例如
hello world
hello world
不过要注意的是,如果在一个程序中先使用cin>>str输入,然后再使用getline函数的话,需要再cin>>str之后使用cin.get()处理回车才行,也就是把回车当做cin.get()的输入,毕竟用户确实输入了一个回车。
#include <iostream>
using namespace std;
int main(){
string str;
cin>>str;
cout<<str<<endl;
cin.get();
getline(cin,str);
cout<<str<<endl;
return 0;
}
例如
helloworld
helloworld
hello world
hello world
这才是技术分享啊!
支持,str语法讲的特别细致
赞一个,一直想去搞懂EOF是啥来着