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

Switch:在Switch外部声明变量并在其中使用,c,variables,integer,switch-statement,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)

以下不是问题所在,只是导致问题的部分:

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


好了,现在成功了,谢谢大家

您要扫描的号码是多少?您可能没有该数字的开关大小写,这意味着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修复了扫描问题

您扫描的号码是多少?您可能没有该数字的开关大小写,这意味着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修复了扫描问题“int p”声明将p指定给任意值:内存中发生的任何值。现在,如果s不等于1或2,这个值永远不会改变,这就是你看到的。你能做的就是

  • 将default:子句添加到switch()中,并将p指定给其中有意义的内容
  • 将p声明为“int p=0
“int p”声明将p分配给任意值:内存中发生的任何值。现在,如果s不等于1或2,这个值永远不会改变,这就是你看到的。你能做的就是

  • 将default:子句添加到switch()中,并将p指定给其中有意义的内容
  • 将p声明为“int p=0
    • 您有两个问题:(i)
      p
      未初始化,(ii)您正在将
      s
      传递给scanf,其中需要
      s
      的地址

      更改:

      int s,p;
      scanf("%d",s);
      
      致:

      您有两个问题:(i)
      p
      未初始化,(ii)您正在将
      s
      传递给scanf,其中需要
      s
      的地址

      更改:

      int s,p;
      scanf("%d",s);
      
      致:


      您可以使用默认值,然后尝试找出在中扫描的内容。

      您可以使用默认值,然后尝试找出在中扫描的内容。

      有人应该将C标记添加到此中。有人应该将C标记添加到此中。