매우 간단한 로마 숫자를 10 진수로 변환하려고 시도하지만 로마자가 아닌 숫자 문자가 문자열에있는 경우 프로그램이 -1을 반환하는 방법을 찾지 못하는 것 같습니다. 이것은 내가 지금까지 가지고있는 것이다.로마 숫자를 10 진수로
#include <stdio.h>
#include <ctype.h>
int convertFromRoman(const char *s)
{
int i = 0;
int total = 0;
while (s[i] != '\0') {
if (isalpha(s[i]) == 0) {
return -1;
}
if (toupper(s[i]) == 'I') {
total += 1;
}
if (toupper(s[i]) == 'V') {
total += 5;
}
if (toupper(s[i]) == 'X') {
total += 10;
}
if (toupper(s[i]) == 'L') {
total += 50;
}
if (toupper(s[i]) == 'C') {
total += 100;
}
if (toupper(s[i]) == 'D') {
total += 500;
}
if (toupper(s[i]) == 'M') {
total += 1000;
} else {
return -1;
}
i++;
}
if (total == 0) {
return -1;
}
return total;
}
int main()
{
printf("%d\n", convertFromRoman("XVII"));
printf("%d\n", convertFromRoman("ABC"));
}
첫 번째 것은 17을 반환하고 두 번째 것은 -1을 반환해야합니다. 그러나 둘 다 -1을 반환하지만 else 문을 제거하면 첫 번째 문은 17을 반환하고 두 번째 문단은 100을 반환합니다.
도움이 되었습니까?
숙제는 해결되지 않습니다. 아마도 첫 번째 줄을'// Homework'라고하는 것은 좋지 않을 것입니다. –
@CharlieFish에 대한 당신의 의견을 보내 주셔서 감사합니다. 아무도 그것을 해결할 것을 요구하지 않고 있었다! 제가 누락 된 부분에 대한 조언을 찾고 있었거나 일부 문서를 참조하고있었습니다. 숙제를 거기에 넣으면 배울 좋은 방법이 아니므로 완전한 대답을 얻지 못했습니다! – Mikey
'else if'를 사용하십시오. (하지만 논리에 "IV"라는 잘못된 결과가 있음) – BLUEPIXY