您好我们被分配制作一个程序,要求用户输入一个4位十进制数,该程序应该将其转换为其等效的罗马数字。我们的任务是只使用开关盒功能而不是其他任何东西。我以为我有正确的想法,但我的代码的问题是它不提供输出。以下是我的代码,帮助,指示和建议将不胜感激
int num, A, B, C, D;
printf("enter a number: ");
scanf("%d", &num);
D = num%10;
C = ((num%100)/10);
B = ((num%1000)/100);
A = (num/1000);
if(0<num&&num<3001)
{
switch(A)
{
case '1' : printf("M");
break;
case '2' : printf("MM");
break;
case '3' : printf("MMM");
break;
}
switch(B)
{
B = ((num%1000)/100);
case '1' : printf("C");
break;
case '2' : printf("CC");
break;
case '3' : printf("CCC");
break;
case '4' : printf("CD");
break;
case '5' : printf("D");
break;
case '6' : printf("DC");
break;
case '7' : printf("DCC");
break;
case '8' : printf("DCCC");
break;
case '9' : printf("CM");
break;
}
switch(C)
{
C = ((num%100)/10);
case '1' : printf("X");
break;
case '2' : printf("XX");
break;
case '3' : printf("XXX");
break;
case '4' : printf("XL");
break;
case '5' : printf("L");
break;
case '6' : printf("LI");
break;
case '7' : printf("LII");
break;
case '8' : printf("LIII");
break;
case '9' : printf("XC");
break;
}
switch(D)
{
D = num%10;
case '1' : printf("I");
break;
case '2' : printf("II");
break;
case '3' : printf("III");
break;
case '4' : printf("IV");
break;
case '5' : printf("V");
break;
case '6' : printf("VI");
break;
case '7' : printf("VII");
break;
case '8' : printf("VIII");
break;
case '9' : printf("IX");
break;
}
}
else
printf("number out of bounds");
答案 0 :(得分:2)
您的案例陈述包含数字的ascii值。这种情况是1吗?或案例&#39; 1&#39;。两者都有不同的含义。
答案 1 :(得分:2)
在你的switch()
中,每个案例都假定它是一个字符1
(根据ascii表十六进制值0x31
),当它检查这个案例时你的实际值是一个整数价值,即;如果num
为1
,则其十六进制值也为0x1
,
所以你应该将switch case更改为整数的十六进制值
还有一点需要注意,我认为您应该将if(0<num&&num<3001)
更改为if(num > 0 && num<3001)
if((num > 0) && (num<3001))
{
printf("*\n");
switch(A)
{
case 1 : printf("M");
break;
case 2 : printf("MM");
break;
case 3 : printf("MMM");
break;
}
switch(B)
{
B = ((num%1000)/100);
case 1 : printf("C");
break;
case 2 : printf("CC");
break;
case 3 : printf("CCC");
break;
case 4 : printf("CD");
break;
case 5 : printf("D");
break;
case 6 : printf("DC");
break;
case 7 : printf("DCC");
break;
case 8 : printf("DCCC");
break;
case 9 : printf("CM");
break;
}
switch(C)
{
C = ((num%100)/10);
case 1 : printf("X");
break;
case 2 : printf("XX");
break;
case 3 : printf("XXX");
break;
case 4 : printf("XL");
break;
case 5 : printf("L");
break;
case 6 : printf("LI");
break;
case 7 : printf("LII");
break;
case 8 : printf("LIII");
break;
case 9 : printf("XC");
break;
}
switch(D)
{
D = num%10;
case 1 : printf("I");
break;
case 2 : printf("II");
break;
case 3 : printf("III");
break;
case 4 : printf("IV");
break;
case 5 : printf("V");
break;
case 6 : printf("VI");
break;
case 7 : printf("VII");
break;
case 8 : printf("VIII");
break;
case 9 : printf("IX");
break;
}
}
答案 2 :(得分:0)
案例的常量表达式必须与交换机中的变量具有相同的数据类型,并且必须是常量或文字。 在你的情况下,他们是不一样的。所以请纠正。
答案 3 :(得分:0)
我认为你只想要切换案例中的数字,所以试试这个:
switch(A){
case 1: printf("M");
break;
case 2: printf("MM");
break;
case 3: printf("MMM");
break;
}