[C++ 소스] 입력된 것이 수가 아닌 것을 판별
/*
더블형의 배열에 기부금을 10개까지 읽어들이는 프로그램을 작성하라.
10개가 입력되기 전이라도 수가 아닌 것이 입력되면 프로그램이 종료되어야 한다.
프로그램은 입력된 기부금들의 평균과, 평균보다 큰 기부금 이 배열에 몇개 들어 있는지 보고 해야 한다.
*/
위의 조건을 충족하는 프로그램이다.
중요한 점은 수가 아닌 것이 입력되면 프로그램이 종료되어야 한다는 것.
strtod() 함수를 이용하여 판별이 가능하다.
함수의 사용법은 여기를 참고 : http://www.cplusplus.com/ref/cstdlib/strtod.html
strtod()는 입력된 문자열을 더블형으로 변환한다.
하지만 입력된 문자열이 숫자가 아닌 구성(영문, 특수문자등)으로 되어 있을 경우, 포인터 인수에 숫자가 아닌 구성이 참조된다.
따라서 포인터값이 Null인지 아닌지를 체크하여 입력된 것이 수인지 아닌지 판별이 가능하다.
---------------------------------
/*
더블형의 배열에 기부금을 10개까지 읽어들이는 프로그램을 작성하라.
10개가 입력되기 전이라도 수가 아닌 것이 입력되면 프로그램이 종료되어야 한다.
프로그램은 입력된 기부금들의 평균과, 평균보다 큰 기부금 이 배열에 몇개 들어 있는지 보고 해야 한다.
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
void main()
{
int i, count;
char inputStr[256], *pEnd;
double donation[10], temp, sum, average;
i=count=sum=temp=0;
for (i=0; i<10; i++)
{
cout << "[" << i+1 << "] " << "금액 : ";
cin >> inputStr;
temp = strtod(inputStr, &pEnd);
if (*pEnd != NULL)
{
cout << "\n입력을 종료합니다.\n";
break;
}
donation[i] = temp;
sum = sum + temp;
}
cout << "\n----------------------\n\n";
if (i != 0)
{
average = sum / i;
cout << "합 : " << sum << " , " << "수 : " << i << endl;
for (; i>0; i--)
{
if (donation[i] > average)
{
count++;
}
}
cout << "\n기부금의 평균 : " << average << endl;
cout << "평균보다 큰 기부금의 수 : " << count << endl;
}
else
cout << "기부금이 입력되지 않았습니다." << endl;
cout << "\n";
}