首先!!!还是看了小姐姐的思路!!因为很多知识点都不知道,只能这样慢慢刷题学习辣~
学到了sscanf()和sprintf()
第一个sscanf(源字符串,格式,目的变量)是以字符串为输入源,存储到你定义的格式变量里
第二个sprintf(目的字符串,格式,源变量)是将格式化的数据写入字符串
所以这道题先把输入的a字符串转换为数字
再从数字转换为b字符串
再判断ab字符串是否相等
若不相等说明这个数不合法 否则就合法辣~~
最后就是输出格式的问题辣~~认真看题
完整code:
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int T;
cin >> T;
char a[50],b[50];
double temp,sum=0;
int count=0;
while(T--)
{
scanf("%s",a);
sscanf(a,"%lf",&temp);//将a字符串转换为格式lf存到temp里
//cout << temp << endl;
sprintf(b, "%.2lf",temp);//将格式化的temp写入字符串b
int flag = 0;
for(int j=0;j<strlen(a);j++)//判断新的字符串跟原来的是不是相等的
{
if(a[j]!=b[j])
flag = 1;
}
if(flag || temp<-1000||temp>1000)//如果flag = 1表示不相等有问题
{
printf("ERROR: %s is not a legal number\n",a);
}
else
{
count++;
sum += temp;
}
}
// cout << sum << " " << count << " " <<sum/count<< endl;
if(count==1)
{
printf("The average of 1 number is %.2lf\n",sum);
}
else if(count > 1)
{
printf("The average of %d numbers is %.2lf\n",count,(double)sum/count);
}
else
{
printf("The average of 0 numbers is Undefined\n");
}
return 0;
}