在交换机上做一会儿

时间:2012-12-15 20:13:21

标签: c while-loop switch-statement

我想做一个乘法表, 用户选择号码后,在显示表格后。 但在我的代码中,虽然在开关内部没有工作,为什么? 例如:

#include<stdio.h>

int main(){

int x,y=10;

printf("Welcome!\n");
printf("choose a number for multiplication table \n");
scanf("%i",&x);


switch(x){

    case '1':
        while(y)
        {

            printf(" %i * %i  = %i \n",x,y,x*y);
            y--;


        }
    };break;    
}
}

4 个答案:

答案 0 :(得分:4)

你有一个额外的}

case '1':
    while(y)
    {

        printf(" %i * %i  = %i \n",x,y,x*y);
        y--;


    }
};break; // This break is outside of your switch 

此外,您打开的字符值为1,而不是整数值1.您应该更改case以匹配。

答案 1 :(得分:2)

'1'不是int1(但字符文字'1'int值为49)所以我怀疑它没有在交换机中进入那种情况。将案例标签更改为整数文字1

case 1:

检查scanf()的返回值,以确保已读取int且后续代码未处理x已整合:

if (1 == scanf("%i", &x))
{
}

答案 2 :(得分:1)

C ++ switch-case语法:

switch ( x) {

  case 1 : //x is an integer

    while(y)
    {
        printf(" %i * %i  = %i \n",x,y,x*y);
        y--;
    }
    break; //Inside the case


}

答案 3 :(得分:1)

尽管有额外的大括号,但是将输入值与switch语句中的选项进行比较的方式存在问题。在以下行中:

scanf("%i",&x);

编译器被告知程序在这里需要一个整数值,所以当用户在stdin上键入1时,0x01存储在x变量中。不幸的是,这里:

case '1':

x变量与'1'(ASCII字符)进行比较,等于0x31。所以你的案例陈述应该是这样的:

case 1:

当然,您可以在case语句中使用ASCII字符。您可以修改程序以将输入视为char数据类型:

scanf("%c",&x);

然后,0x31存储在x变量中并将其与'1'进行比较是有意义的。但是,您必须记住将x转换为int值以不破坏程序的功能:

x -= 0x30;

第一种方法肯定更方便。