【问题标题】:Why am I getting garbage values?为什么我得到垃圾值?
【发布时间】:2021-01-31 20:43:51
【问题描述】:

我正在尝试进行一些基本的数字递增,但我得到了一些奇怪的垃圾值。 (这在 C# 中有效,但在 C 中无效)。有人能告诉我为什么这不起作用吗?

while (1)
{
      int command = 0;

      printf ("Action: ");
      scanf ("%d", &command);


      int countX, countY, countZ = 0;
      if (command == 1)
    {
      countX++;
    }
      if (command == 2)
    {
      countY++;
    }
      if (command == 3)
    {
      countZ++;
    }
      if (command == 0)
    {
      printf ("x: %d, y: %d, z: %d", countX, countY, countZ);
    }

}

【问题讨论】:

  • 您认为初始化了多少变量?正确答案是:1.countX,countY没有初始化。
  • 您应该探索如何在编译器中打开警告。在我的设置中,这永远不会编译(故意)。

标签: c if-statement variables while-loop initialization


【解决方案1】:

这个:

int countX, countY, countZ = 0;

仅初始化countZ 并留下countXcountY 未初始化。你想要:

int countX = 0, countY = 0, countZ = 0;

【讨论】:

    【解决方案2】:

    如果command 等于0,那么您正在尝试输出具有不确定值的未初始​​化变量countXcountY

    你应该在它们的声明中初始化它们

    int countX = 0, countY = 0, countZ = 0;
    

    还有这些陈述

    countX++;
    

    countY++;
    

    由于变量未初始化,同样的原因也有未定义的行为。

    请注意,您可以使用 switch 语句而不是 if 语句。

    例如

    switch ( command )
    {
    case 1:
        countX++;
        break;
    
    case 2:
        countY++;
        break;
    
    case 3:
        countZ++;
        break;
    }
    
    printf ("x: %d, y: %d, z: %d\n", countX, countY, countZ);
    

    或者您也可以通过以下方式引入枚举

    enum { X = 1, Y = 2, Z = 3 }; 
    switch ( command )
    {
    case X:
        countX++;
        break;
    
    case Y:
        countY++;
        break;
    
    case Z:
        countZ++;
        break;
    }
    
    printf ("x: %d, y: %d, z: %d\n", countX, countY, countZ);
    

    或者如下方式

    while ( 1 )
    {
        enum { X = 1, Y = 2, Z = 3 }; 
        int countX = 0, countY = 0, countZ = 0;
        int exit_loop = 0;
    
        int command = 0;
    
        printf ( "Action: " );
        scanf ( "%d", &command );
    
        switch ( command )
        {
        case X:
            countX++;
            break;
        
        case Y:
            countY++;
            break;
        
        case Z:
            countZ++;
            break;
    
        default:
            exit_loop = 1;
            break; 
        }
        
        if ( exit_loop )
        {
            break;
        }
        else
        {
            printf ("x: %d, y: %d, z: %d\n", countX, countY, countZ);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      相关资源
      最近更新 更多