C/C++中的结束输入条件判断 (scanf、EOF、getchar()、cin.get()、getline)
本教程主要适用于一些程序比赛或大公司机试中的输入数据的处理,总的来说,可以分为以下三种情况:
情况一:输入的测试样例有多组,每组需要相同逻辑的处理;
处理方案:在C语言中可利用scanf("%d",&n)!=EOF,在C++中可以使用while(cin>>n)。
例如:计算两数之和,输入可能有多组样例。
#include
using namespace std;
int main(){
int a,b;
while(scanf("%d %d",&a,&b)!=EOF){
cout<
} return 0; } 或者使用C++的写法: #include using namespace std; int main(){ int a,b; while(cin>>a>>b){ cout<
} return 0; } 结果是这样的: 解释一下C语言中的scanf()函数,它的返回值可以分为以下几种情况:一般是返回按照指定格式输入变量的个数,但若遇到错误或者遇到end of file,则返回-1. 而恰好EOF是一个系统预定义的一个常量,它的值是-1。这样也就解释清楚了,下面验证一下: #include using namespace std; int main(){ int a,b; cout<<"EOF的值为:"< int temp1 = scanf("%d",&a); cout<<"此时scanf()函数的返回值:"< int temp2 = scanf("%d %d",&a,&b); cout<<"此时scanf()函数的返回值:"< int temp3 = scanf("%d %d",&a,&b); cout<<"此时scanf()函数的返回值:"< return 0; } 情况二:当输入一个数组时,无法确定其长度时,通过输入换行还结束输入。 处理方案:在C语言中可利用getchar(),在C++中可以使用cin.get()。两者都表示从stdio流中读一个字符,也就是说从控制台中读取下一个字符。 例如:输入一个整型数组,再按序输出,注意没有给定输入数组的长度。 #include using namespace std; int main(){ int A[100]; int i = 0; for(i=0;;i++){ cin>>A[i]; if(getchar()=='\n') break; } for(int j=0;j
cout<
return 0; } 或者简写成: #include using namespace std; int main(){ int A[100]; int i = 0; while(cin>>A[i] && getchar()!='\n'){ i += 1; } for(int j=0;j