0

我想做一个乘法表,用户选择数字,然后显示表。但是在我的代码中,虽然在开关内部不起作用,为什么?前任:

#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

4 回答 4

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为匹配。

于 2012-12-15T20:15:28.003 回答
2

'1'不是int1(而是字符文字'1'并且具有int49)所以我怀疑它没有在开关中输入这种情况。将 case 标签更改为整数文字1

case 1:

检查 的返回值scanf()以确保int已读取并且后续代码未处理未x初始化:

if (1 == scanf("%i", &x))
{
}
于 2012-12-15T20:15:04.673 回答
1

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

scanf("%i",&x);

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

case '1':

x 变量与等于 0x31 的“1”(ASCII 字符)进行比较。因此,您的案例陈述应如下所示:

case 1:

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

scanf("%c",&x);

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

x -= 0x30;

第一种方法肯定更方便。

于 2012-12-15T22:54:44.177 回答
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


}
于 2012-12-15T20:17:59.650 回答