XHAENEUNG 문제 질문있습니다. Jinsanger 현재 예제 데이터는 물론 댓글에서 제시해주신 데이터들도 테스트해봣는데 Runtime Error가 나오네요..... T_T 오답도 아니고 Runtime Error라서 감이 안오네요...... Runtime Error라면 코드가 불안정하다느ㄴ 얘기인데 T_T 어디가 어떻게 불안정한지 모르겟습니다... 고수님들 도와주세요. T_T #include <iostream> #include <string.h> #include <string> using namespace std; int OCR(char* numA){ int numberA=0; if(strcmp(numA, "zero")==0) numberA=0; else if(strcmp(numA, "one")==0) numberA=1; else if(strcmp(numA, "two")==0) numberA=2; else if(strcmp(numA, "three")==0) numberA=3; else if(strcmp(numA, "four")==0) numberA=4; else if(strcmp(numA, "five")==0) numberA=5; else if(strcmp(numA, "six")==0) numberA=6; else if(strcmp(numA, "seven")==0) numberA=7; else if(strcmp(numA, "eight")==0) numberA=8; else if(strcmp(numA, "nine")==0) numberA=9; else if(strcmp(numA, "ten")==0) numberA=10; return numberA; } char* OIR(int number){ switch(number){ case 0: return "zero"; case 1: return "one"; case 2: return "two"; case 3: return "three"; case 4: return "four"; case 5: return "five"; case 6: return "six"; case 7: return "seven"; case 8: return "eight"; case 9: return "nine"; case 10: return "ten"; default: break; } return 0; } bool OCR2(int num, char* target){ char* answerStr = OIR(num); int closeList[10] = {0, }; int correctCnt = 0; if(answerStr == 0){ return false; } for(int i=0; i<strlen(answerStr); i++){ for(int j=0; j<strlen(target); j++){ if(answerStr[i] == target[j] && closeList[j] != 1){ closeList[j] = 1; correctCnt++; break; } } } if(correctCnt == strlen(answerStr)) return true; return false; } int main(void){ int T = 0, caseCnt = 0; int* resultSet = 0; cin>>T; resultSet = new int[T]; while(caseCnt < T){ char numA[6] = {0, }; char numB[6] = {0, }; char oper[2] = {0, }; char equ[2] = {0, }; char answer[6] = {0, }; int numberA = 0, numberB = 0, numAnswer = 0; cin>>numA>>oper>>numB>>equ>>answer; numberA = OCR(numA); numberB = OCR(numB); if(strcmp(oper, "+")==0){ numAnswer = numberA + numberB; } else if(strcmp(oper, "-")==0){ numAnswer = numberA - numberB; } else if(strcmp(oper, "*")==0){ numAnswer = numberA * numberB; } else{ resultSet[caseCnt] = 0; caseCnt++; continue; } if(OCR2(numAnswer, answer)){ resultSet[caseCnt] = 1; }else{ resultSet[caseCnt] = 0; } caseCnt++; } for(int i=0; i<caseCnt; i++){ if(resultSet[i] == 1) cout<<"Yes"<<endl; else if(resultSet[i] == 0) cout<<"No"<<endl; } return 0; } 10년 전
3개의 댓글이 있습니다. sjc1117 님께서도 저랑 같은 실수를 하셨네요 OIR이란 함수에서 char*를 반환하시는데 C에서 포인터를 반환하면 안됩니다 char*를 인자로 받으셔서 처리하셔야 될 것 같습니다 10년 전 link Jinsanger 감사합니다 ㅋㅋ 해결했습니다. 메모리 불안정 요소를 제거한 이후에도 런타임 에러가 떠서 왜인지 보니까 정답의 제약 사항을 예외 처리를 안했더군요 ㅋㅋ 10년 전 link Being C에서 char *를 반환하는 건 아무런 문제가 없습니다. sjc1117님의 경우 함수 스코프 내에 위치한 지역 변수, 즉 리턴되면 소멸되는 대상에 대한 포인터를 취하셨었기에 문제가 됩니다. 내부에서 문자열 상수(string literal)을 리턴했는데, 이 경우 원칙적으로는 const char * 타입을 쓰셔야 맞습니다. 따라서 아마도 위의 코드에서는 해당 문자열을 수정한 적이 없기 때문에 해당 내용은 정답 여부에 아무런 상관이 없었을 것 같네요. 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
Jinsanger
현재 예제 데이터는 물론 댓글에서 제시해주신 데이터들도 테스트해봣는데 Runtime Error가 나오네요..... T_T
오답도 아니고 Runtime Error라서 감이 안오네요......
Runtime Error라면 코드가 불안정하다느ㄴ 얘기인데 T_T 어디가 어떻게 불안정한지 모르겟습니다... 고수님들 도와주세요. T_T
10년 전