#include<bits/stdc++.h>
using namespace std;
int main(){
int n,cnt=0;
scanf("%d",&n);
char _2[50];
double _1,sum=0;
char a[50];
for(int i=0;i<n;i++){
scanf("%s",&a);
sscanf(a,"%lf",&_1);
sprintf(_2,"%.2lf",_1);
int flag=1;
for(int j=0;j<strlen(a);j++){//只要<=即可 字符串要用strlen
if(a[j]!=_2[j]){
flag=0;
}
}
if(flag==1&&_1<=1000&&_1>=-1000){
sum+=_1;
cnt++;
}
else{
printf("ERROR: %s is not a legal number\n",a);
}
}
if(cnt==0){
printf("The average of 0 numbers is Undefined\n");
}
else if(cnt!=1){
sum=sum/cnt;
printf("The average of %d numbers is %.2lf\n",cnt,sum);
}
else{
printf("The average of 1 number is %.2lf\n",sum);
}
return 0;
}
总结
1.isdigit只能单位判断,不能整条字符串判断 是不是数可以用sscanf固定格式看能不能输入来判断,不能会返回一个特别小的数用字符串判断的话能判断出来 方向从左到右
2.ssprintf 方向从右到左,会返回一个字符串,第一个位置的字符
3.本题应用了这两个函数后,只要比较原字符串与ssprintf的字符串在原字符串的长度下是否相等就可以了,因为原字符串不一定能达到ssprintf规定的字符串的小数位数
英语
问题
无