gpt4 book ai didi

c - 从 "char"到 "char *"的转换无效

转载 作者:行者123 更新时间:2023-11-30 18:58:23 25 4
gpt4 key购买 nike

这是将罗马数字(例如 VI)转换为十进制的程序。该算法正在编写一个函数来识别输入字符串的每个元素并返回相应的十进制值。

我们得到了char Roman_num[20]对于每个元素,sum+=value(Roman_num[i])。函数原型(prototype)是int value (char digital)。它会导致“从字符到字符 *' 错误。

但是,当将每个元素的地址 &a[i] 传递给函数并将原型(prototype)更改为 int value (char *digit) 时,它不会重复此操作错误,但会导致此 switch-case 中的另一个错误(在函数内部):switch (*digit) 给出错误 '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;
}

最佳答案

由于您不会发布代码,因此这里有一些用于获取始终增加的罗马数字的代码。减法部分留给你自己去算。我只是发布这个,因为听起来你是在自学,这是值得称赞的:


int romanToValue(const char c)
{
switch(c) // Only works with upper-case as lower case means different things.
{
case 'I' : return 1;
case 'V' : return 5;
case 'X' : return 10;
case 'L' : return 50;
case 'C' : return 100;
case 'D' : return 500;
case 'M' : return 1000;
default: printf("Bad value in string %c\n", c); break;
}

return 0;
}

int romanToInt(const char *str)
{
int value = 0;
int i;

for(i=0; str[i]; i++) // Dangerous way to do strings, but works for a C example.
{
value += romanToValue(str[i]);
}

return value;
}

int main(void)
{
const char cstr[] = "VIII";

printf("value:%d\n", romanToInt(cstr));
return 0;
}

请注意,switch 语句是根据 char 值工作的。

关于c - 从 "char"到 "char *"的转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16739940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com