这个题目比较坑在number和numbers上面。容易漏掉负号。容易漏掉小数点问题。pritnf输出string还是会出错。慎重选择吧。
cin>>num[]也是合法的。
代码
//最初出错在一个坑人的地方。num没有初始化,本地通过了,oj没有通过。果然厉害。以后一定记得要初始化啊。还有number 和numbers的问题。
#include<iostream>
#include<stdlib.h>
#include<string>
#include<sstream>
using namespace std;
int main(){
char temp;
string s;
int n;
char a[100][100];
int count=0,fcount=0,subcount=0;
bool not_legal,after_float;
cin>>n;
int num=0;
float number=0,legal;
// while(cin>>s)
for(int i=0;i!=n;i++)
{
cin>>s;
not_legal =false;
after_float=false;
count=0;
fcount=0;
subcount=0;
istringstream stream(s);
while(stream>>temp){
if(temp=='.'){
after_float=true;
count++;
}
else if(temp>'9'||temp<'0'){
not_legal=true;
if(temp=='-'&&subcount==0){
subcount++;
not_legal=false;
}
}
if(after_float){
fcount++;
}
if(count>1){
not_legal=true;
}
if(fcount>3){
not_legal=true;
}
}
istringstream stm(s);
stm>>legal;
if(legal>1000||legal<-1000){
not_legal=true;
}
if(not_legal){
//printf("ERROR: %s is not a legal number\n",s);
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;
}
else{
num++;
// istringstream stream(s);
// stream>>legal;
number+=legal;
}
}
if(num){
if(num==1){
printf("The average of %d number is %.2f\n",num,number/num);
}
else{
printf("The average of %d numbers is %.2f\n",num,number/num);
}
// printf("The average of %d numbers is %.2f\n",num,number/num);
}
else{
printf("The average of 0 numbers is Undefined\n");
}
return 0;
}