这是将罗马数字(例如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’错误不能出现在constant-expression中
我的问题是我不清楚:在这个例子中,我们是否必须只将地址传递给函数? 如果我们想传递值,单个字符值,那么如何? 最后但并非最不重要的是,*数字实际上是一个单个字符,那么为什么它不能出现在case()
中的常量表达式中?
我将非常感谢你的帮助。 另一方面,你可以向我推荐一些书籍,以便深入了解C语言吗? 我现在正在使用C:How To Program book,我几乎不知道变量,函数如何在内部工作以便更深入地理解。
这是代码:
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 %cn", 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:%dn", romanToInt(cstr)); return 0; }
请注意, switch
语句正在处理char
值。
以上就是c/c++开发分享从“char”到“char *”的转换无效相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549263.html