経験:
1.sscanf())(デジタル2.sprintf文字列の形式から抽出することができ、デジタル形式の文字の配列で存在することができます
文字列が所望のフォーマットであるかどうかを、この特徴によれば確認することができ、sscanf関数は、()、sprintfの所望のフォーマット()は、所望のフォーマットに文字列を読み出す読み出し、
浮動小数点数が読み出される場合、それは、2つの小数点以下の精度が望まれる、はsprintf()は読み出し%.2f、その後、最初の文字列を横断することができ、それを決定することができるかどうか、それがない場合はフローティングため形式、 sscanf関数は、()の変化を生成する際のポイントは、間違っています
整数は自動的にいくつかの後ろに小数点とゼロが追加されますが、それは最初の文字列トラバーストラバースまでの時間だった、小数に横断していないと、コンソールの書き込みためと浮動小数点形式の整数を読み込むときは、右にカウントすることができます一部では、それはまだ同じ分析になります
例えば:のsscanf(STR1、 "%のLF")、STR1に5を書き込むコンソールは、ある5.000000とのsprintf(STR2、 "%の2F"、A)、STR2 5.00が、トラバーサルに読み込まれますstr1は、コンパレータ5 = 5の一部のみ
トピック:
この問題の基本的な要件は非常に簡単です:N実数与えられ、その平均を算出します。しかし、合併症は、入力データの一部が違法であってもよいことです。区間[-1000,1000]入力での実数である「合法的な」、と、小数点以下1桁に最も正確で。あなたは平均値を計算すると、これらの不正なデータはカウントされませ。
入力フォーマット:
最初の行の入力は、正の整数N(≤100)が与えられます。次いで、ラインNの実数を与えられた数の間のスペースで区切られました。
出力フォーマット:
、不正入力の行ごとに出力ERROR: X is not a legal number
、X
入力されます。最終的な出力とライン:法的入力の数であるが、平均値その二進場所です。平均値で、計算できない場合は、交換。もし1、出力。The average of K numbers is Y
K
Y
Undefined
Y
K
The average of 1 number is Y
サンプル入力1:
7
5 -3.2 aaa 9999 2.3.4 7.123 2.35
出力サンプル1:
ERROR: aaa is not a legal number
ERROR: 9999 is not a legal number
ERROR: 2.3.4 is not a legal number
ERROR: 7.123 is not a legal number
The average of 3 numbers is 1.38
サンプル入力2:
2
aaa -9999
出力サンプル2:
ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined
アイデア:
文字列が有効な数値であるかどうかを判断するために使用のsscanf()、sprintfの()変換、他の人と学んだトリック
エラーのテストポイント2原因:注さて、出力されたときK = 1のThe average of 1 number is Y,是number而不是numbers
コード:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int num,legal=0;
double temp,sum=0;
cin>>num;
for(int i=0;i<num;i++)
{
bool is_legal=true;
char a[100],b[100];
scanf("%s",a);
sscanf(a,"%lf",&temp);
sprintf(b,"%.2f",temp);
for(int j=0;j<strlen(a);j++)
{
if(a[j]!=b[j])
{
is_legal=false;
break;
}
}
if(!is_legal||temp<-1000||temp>1000)
printf("ERROR: %s is not a legal number\n",a);
else
{
legal++;
sum+=temp;
}
}
if(legal==1)
printf("The average of 1 number is %.2f\n",sum);
else if(legal==0)
printf("The average of 0 numbers is Undefined\n");
else
printf("The average of %d numbers is %.2f",legal,sum/legal);
return 0;
}