Switch:声明变量外部开关并在其中使用它

时间:2011-02-17 21:43:33

标签: c variables integer switch-statement

以下不是导致问题的部分:

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

好的,现在它起作用谢谢大家!

4 个答案:

答案 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,那么该值永远不会改变,这就是你所看到的。你能做的是

  • 将switch:子句添加到您的开关()并将p分配给有意义的内容
  • 将p声明为“int p = 0;”

答案 3 :(得分:0)

您可以使用默认值,然后尝试找出在

中扫描的内容