Пытается внедрить очень простой конвертер Roman Numeral в Decimal, но не может показаться, что программа возвращает -1, если в строке находятся какие-либо не-римские цифры. Это то, что у меня есть до сих пор.Roman Numeral To Decimal
#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