c - 开关案例分配,我的案例都没有提供输出

标签 c switch-statement output

大家好,我们被指派制作一个程序,要求用户输入 4 位小数,并且该程序应该将其转换为等效的罗马数字。我们的任务是只使用 switch case 函数,别无其他。我认为我的想法是正确的,但我的代码的问题是它没有提供输出。以下是我的代码、帮助、指示和建议,我们将不胜感激

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");

最佳答案

在你的switch() , 每个案例都假定它是一个字符 1 (根据 ascii 表十六进制值 0x31 ),当它检查大小写时,您的实际值将是一个整数值,即;如果num1那么它的十六进制值也是 0x1 , 所以你应该将 switch cases 更改为整数的十六进制值

还有一个注意事项,我认为你应该更改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;      
    }  
} 

关于c - 开关案例分配,我的案例都没有提供输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451910/

相关文章:

android - 移动设备上的 Speex 抖动缓冲器

c - OpenMP 求和说明

c - 为什么给指定的整数提供 float 格式说明符会导致 0.000000?

sas - 如何将回归系数保存到 SAS 文件中?`

c - 自然对数 (ln) 和指数的高效实现

c - 在 C 中以二进制形式打印 ASCII 字符值

c - 使用 C30 和 MPLAB X 的 switch 语句的奇怪行为

java - 奇怪的错误 - 从菜单中断后不执行任何操作

C++ for循环和switch语句逻辑错误

c - 下面程序的输出应该是什么?