- 리소스 뷰에 Edit Control
추가
public:
CMfcProject1Dlg(CWnd* pParent = nullptr); // 표준 생성자입니다.
CString m_but; //숫자(문자)
CString m_result; //에디트 컨트롤
CString m_recode; //계산 기록
bool m_equalClk; //클릭 확인
int m_type; //연산자 타입
if (m_equalClk || recodeStr[reclength - 1] == '+')
따옴표 안 기호만 바꿔서 사용void CMfcProject1Dlg::OnBnClickedButtonplus()
{
CString recodeStr;
recodeStr.Format(m_result);
int reclength = recodeStr.GetLength();
if (m_result.IsEmpty() || (!m_result.IsEmpty() && (recodeStr[reclength - 1] == '.' || recodeStr[reclength - 1] == '+' ||
recodeStr[reclength - 1] == '-' || recodeStr[reclength - 1] == '*' || recodeStr[reclength - 1] == '/')))
{
return; // 소수점 추가 입력 막기
}
if (m_equalClk || recodeStr[reclength - 1] == '+') {
//m_result.Empty();
m_equalClk = false; // 변수를 컨트롤에 출력
}
/*if (m_equalClk) {
m_result.Empty();
m_equalClk = false;
}*/
//m_result += _T("+");
m_type = plus; //1
m_but = m_result;
m_result.Empty();
UpdateData(false);
}
오류 수정 전
처음 실행할 땐 입력이 제어되는데 계산을 한번 한 뒤는 제어가 풀림
m_but
(입력1)과 m_result
(입력2)가 비어있지 않을 때 각각의 문자열을 숫자로 변환한다. void CMfcProject1Dlg::OnBnClickedButtonequal() // 연산
{
double op1, op2, result;
if (!m_num.IsEmpty() && !m_result.IsEmpty())
{
op1 = _tstof(m_num); // 문자열을 숫자로 변환
op2 = _tstof(m_result);
switch (m_type)
{
case plus:
result = op1 + op2;
break;
case minus:
result = op1 - op2;
break;
case multi:
result = op1 / op2;
break;
case divide:
result = op1 / op2;
break;
default:
result = 0.0; // 기본값 설정
break;
}
// result 값이 6자리 이상 소수인 경우 소수점 이하 6자리까지 출력, 그렇지 않은 경우 필요한 만큼만 출력
// static_cast로 result값을 정수형으로 변환
// result가 0 이 아닌 값 || result가 1000000.0보다 크거나 같음
if (result == static_cast<int>(result) || result >= 1000000.0)
{
m_result.Format(_T("%d"), static_cast<int>(result)); // 소수점 이하 부분을 제외하고 정수만 출력
}
else
{
CString resultStr;
resultStr.Format(_T("%.6f"), result); // 소수점 이하 6자리까지 출력
int length = resultStr.GetLength();
while (resultStr[length - 1] == '0')
{ //소수점 이하의 0을 제거
length--;
}
if (resultStr[length - 1] == '.')
{ //마지막 소수점 문자 제거
length--;
}
m_result = resultStr.Left(length); // 최종으로 수정된 길이로 문자열 잘라서 m_result에 저장
}
m_equalClk = true;
}
else
{
return;
}
UpdateData(false);
//m_equalClk = false;
}
m_num.Empty();
: m_num(첫 번째 값) 비우기void CMfcProject1Dlg::OnBnClickedclear()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
m_result.Empty();
m_num.Empty();
UpdateData(false);
}
- 계산 한 뒤에도 =
막힘
즐겁게 읽었습니다. 유용한 정보 감사합니다.