以下不是导致问题的部分:
int s,p;
scanf("%d",s);
switch(s)
{
case 1:
{
p=10;
break;
}
case 2:
{
p=15;
break;
}
}
printf("%d",p);
问题是p会打印一个随机且非常大的数字,导致它的原因是什么?
所以我使用了你的一些建议并知道我有以下代码:
int s,p=0;
scanf("%d",&s);
switch(s)
{
case 1:
{
p=10;
break;
}
case 2:
{
p=15;
break;
}
default:
{
printf("Number invalid");
return 0;
}
}
printf("%d",p);
现在我总是默认,即使我只输入1或2
好的,现在它起作用谢谢大家!
答案 0 :(得分:3)
您有两个问题:(i)p
未初始化;(ii)您将s
传递给scanf, s
的地址是必需的。
变化:
int s,p;
scanf("%d",s);
为:
int s, p = 0;
scanf("%d", &s);
答案 1 :(得分:1)
你在扫描的是什么号码?您可能没有该数字的开关案例,这意味着p未初始化(因此是随机的)。例如,如果输入3,则3没有case语句,p将包含随机值。我建议您使用默认情况检测无效输入,其中将值0指定给p。
default:
p = 0;
更正后的代码:
int s,p;
scanf("%d", &s);
switch(s)
{
case 1:
{
p=10;
break;
}
case 2:
{
p=15;
break;
}
default:
{
p=0;
break;
}
}
printf("%d",p);
编辑:修复每个Paul R的scanf问题
答案 2 :(得分:1)
“int p”声明将p赋给任意值:无论发生在内存中。现在,如果s不等于1或2,那么该值永远不会改变,这就是你所看到的。你能做的是
答案 3 :(得分:0)
您可以使用默认值,然后尝试找出在
中扫描的内容