我想做一个乘法表, 用户选择号码后,在显示表格后。 但在我的代码中,虽然在开关内部没有工作,为什么? 例如:
#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;
}
}
答案 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'
不是int
值1
(但字符文字'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;
第一种方法肯定更方便。