这是将罗马数字(例如 VI)转换为十进制的程序。该算法正在编写一个函数来识别输入字符串的每个元素并以十进制返回相应的值。
我们得到char Roman_num[20]
对于每个元素, sum+=value(Roman_num[i])
函数原型是。int value (char digit)
它导致“从 char 到 char * 的无效转换”错误。
但是,当将每个元素的地址传递&a[i]
给函数并将原型更改为 时int value (char *digit)
,它不会重复此错误,但会导致此 switch-case 中的另一个错误(在函数内部): switch (*digit)
给出错误“数字”不能出现在常量表达式
我的问题是我不清楚:在这个例子中,我们是否必须只将地址传递给函数?如果我们要传递值,单个字符值,那怎么办?最后但同样重要的是,*digit 实际上是单个字符,那么为什么它不能出现在 中的常量表达式中case()
呢?
我会很感激你的帮助。另一方面,你能推荐一些深入理解C语言的书吗?我现在正在使用C : How To Program这本书,我几乎不知道变量、函数在内部是如何工作的,以便更深入地理解。
这是代码:
int value (char *digit);
int main (void)
{
char a[100];
int length,i,sum=0;
printf("Enter your Roman number: ");
fflush(stdin);
gets(a);
printf("\nThe Roman number that you have entered is %s",a);
length=strlen(a);
for (i=0;i<length;i++)
{
sum+=value(&a[i]);
}
printf("\nthen it is: %d",sum);
getch();
return 0;
}
int value (char *digit)
{
int num;
case ( *digit ){
case 'M':
num=1000;
break;
case 'D':
num=500;
break;
case 'C':
num=100;
break;
case 'L':
num=50;
break;
case 'X':
num=10;
break;
case 'V':
num=5;
break;
case 'I':
num=1;
break;
}
return num;
}