윈도우 프로그래밍
2장인가..3장인가.. 연습문제...
사칙연산하고 10개의 수를 입력받아 더해서 결과값을 출력
마지막은 = 을 입력하면 자동종료 추가...
1번 예제
if (argc < 2) // 명령이(입력개수) 2개가 초과하면
{
cout << "명령행 입력이 없습니다" << end1; return 2; // 입력이 없다 표기해주고
} // 오류가나면 2로 표기해준다
CString strArg = argv[1];
int iPos = strArg.FindOneOf("+-*/"); //int ipos에 사칙연산을 문자열형태로 삽입한다
{
cont <<"사칙 연산을 입력하세요 " << end1; return 3; // 사칙연산을 입력하라 출력
} // 오류가나면 3으로 표기해준다
CString strFrontEnd = strArg.Left(iPos); //문장 왼쪽에서 ipos만큼 출력해준다
CString strBackEnd = strArg.Mid(iPos + 1);// 문장 오른쪽에서 ipos만큼 출력해준다
CString strOperator = strArg.Mid(iPos , 1);//ipos번째부터 1개 출력해준다(사칙연산출력)
int iforntEnd = atoi(strFrontEnd); // 문자열을 정수로 표현한다
int iBackEnd = atoi(strBackEnd); // atoi함수를 사용
int iResult = 0; // iResult 0으로 선언
double iResult = 0.0; // iResult가 실수형값을 받기위해 double을 사용
if (strOperator == "+") iResault = iFrontEnd + iBackEnd;
//strOperator가 +면 값을 더해준다 아래도 -는 빼주고 *라면 곱해준다
else if(strOprtator == "-") iResault = iFrontEnd - iBackEnd;
else if(strOprtator == "*") iResault = iFrontEnd * iBackEnd;
else if(strOpertaor == "/") // 나눗셈일 경우에는
{
if (iBackEnd == 0) // 오른쪽에 숫자가 0이랑 같은경우에는
{
cont << "0으로 나눌 수 없습니다" << end1;
return 4; // 0으로 나눌수없다하고 오류가 나면 4를 표기해준다
}
ifResult = (double)iFrontEnd / ibackEnd; //0이 아닐경우에는 나눠준값을표기
}
cout << (LPCTSTR)strArg << "="; // =을 출력
cout << (strOperator != "/" ? iResult : lfResult);
// strOperator가 “/”가 아니면 iResult를 사용하고 “/”면 lfResult를사용해서소수점까지출력
cout << end1; // 공백
2번 예제
if(argc < 5) // 명령이(입력개수) 5개가 초과하면
{
cout << "명령행 입력이 4개 입니다" <<endl;
return 2; // 명령행 입력이 4개라고 출력 오류시 2표기
}
CString strXPos = argv[1]; // X좌표를 argv[1]에 저장
CString strYPos = argv[2]; // Y좌표를 argv[2]에 저장
CString strWidth = argv[3]; // 가로크기 argv[3]에 저장
CString strHeight = argv[4]; // 세로크기 argv[4]에 저장
int iXPos = atoi(strXPos); // atoi를 이용해서 문자열을 숫자로 바꿔준다
int iYpos = atoi(strYPos);
int iWidth = atoi(strWidth);
int iHeight = atoi(strHeight);
CRect rectTarget(iXPos, iYPos, iXPos+iWidth, iYPos+iHeight);
// 각 객체에 값을 설정 한다
rectTarget.NormalizeRect();
CPoint ptInput; // CPoint(점) 연산자를 입력
cout << "X 좌표와 Y 좌표를 입력하세요" <<endl;// 입력문구
cin >> ptInput.x >> ptInput.y; // X좌표와 Y좌표를 입력한다(scanf)
if(rectTarget.ptInRect(ptInput) == TRUE) cont << "내부" << endl;
else cout << "외부" << endl;
//CPoint를 사용해서 참이 나오면 내부를 출력하고 그 외에는 외부를출력해준다
3번 예제
cout << "더할 숫자 10개를 입력하세요" << endl; //문구 출력
CUIntArray uiArray;
UINT uiSum = 0; //합한값을 넣을수있게 생성하고 0으로 초기화
for (int i=0; i<10; i++) //for문을 사용해서 10개를 출력
{
cout << i+1 << "번째 : ";//1는 0이므로 1~10번째 출력
cin >> uiArray[i]; // 값을 입력
uisum += uiArray[i]; // 입력한값을 모두 더해서 uisum에 저장
}
for (int j=0; j<10; j++) //for문을 써서 10개를 출력
{
cout << uiArray[j]; // 값을 입력한 것을 출력해준다
cout << (j !=9 ? "+" : "=");
// (j가 9가 아니면) 10개의 입력한 숫자들은 더해주고 그이후 11번째는 합을표기
}
cout << uiSum << endl;
4번 예제
cout << "더할 숫자를 입력하세요 (종료 := 입력)" << endl; //문구 출력
CStringList strList;
UINT i=0; //i 생성 0으로 초기화
TCHAR szNumber[100]; //문자열 지정
while (TRUE) //참일경우
{
cout << ++i << "번째 : "; //i수만큼 i번째 출력
cin >> szNumber; // 숫자를 입력
CString strNumber = szNumber;
if (strNumber.Find("=") != -1)break; // =를 입력할 경우 중지한다
strList.Addtail(strNumber);
}
UINT uisum =0; // uisum을 0으로 초기화
POSITION pos = strList.GetHeadPosition();
while (pos) // 그외의경우
{
CString &strNumber = strList.GetNext(pos);
UINT uinumber = atoi(strNumber); // 문자열을 숫자로 바꿔서 입력
uiSum += uiNumber; //uiNumber에 있는 숫자들을 다 더해서 uisum에 저장
cout << uiNumber; // 숫자를 입력
cout << (pos != NULL ? "+" : "="); // 널(공백이 아니면 더해주고) 공백이면 합해준다
}
cout << uisum << endl; // 더한 값을 출력