【发布时间】:2013-05-24 16:50:14
【问题描述】:
这是将罗马数字(例如 VI)转换为十进制的程序。 该算法正在编写一个函数来识别输入字符串的每个元素并返回对应的十进制值。
我们得到了char Roman_num[20]
对于每个元素,sum+=value(Roman_num[i])。函数原型为int value (char digit)。导致'Invalid conversion from char to char *'错误。
但是,当将每个元素的地址 &a[i] 传递给函数并将原型更改为 int value (char *digit) 时,它不会重复此错误,但会在此 switch-case(函数内部)中导致另一个错误:@987654326 @ 给出错误 'digit' cannot appear in a constant-expression
我的问题是我不清楚:在这个例子中,我们是否必须只将地址传递给函数?如果我们要传递值,单个字符值,那怎么办?最后但同样重要的是,*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;
}
【问题讨论】:
-
你能提供一个简洁的代码示例来编译和重现问题吗?我能看到第一个错误的唯一方法是你的签名是
int value( char *digit )。 -
我们需要查看实际代码,而不是脱节的sn-ps。问题出在你没有向我们展示的东西上。
-
请张贴代码。没有我们面前的来源,我们无法提供太多帮助。
-
char Roman_num[20] For each element, sum+=value(Roman_num[i]).The function prototype is int value (char digit)他们所说的错误在这种情况下不会发生。 -
大胆猜测:你写了
switch case (*digit)Visual Basic 风格。
标签: c function switch-statement character