【问题标题】:Switch: Declared Variable outside switch and use it in it开关:在开关外声明变量并在其中使用
【发布时间】:2011-06-29 10:25:22
【问题描述】:

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

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

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

【问题讨论】:

  • 有人应该给这个添加 C 标签。

标签: c variables integer switch-statement


【解决方案1】:

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

变化:

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

到:

int s, p = 0;
scanf("%d", &s);

【讨论】:

    【解决方案2】:

    "int p" 声明将 p 分配给任意值:内存中发生的任何事情。现在,如果 s 不等于 1 或 2,则该值永远不会改变,这就是您所看到的。你能做的是

    • 将 default: 子句添加到您的 switch() 并将 p 分配给那里有意义的东西
    • 将 p 声明为“int p = 0;”

    【讨论】:

      【解决方案3】:

      您在扫描什么号码?您可能没有该数字的开关盒,这意味着 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 问题

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-15
          • 2012-06-04
          • 1970-01-01
          • 2018-04-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多