簡體   English   中英

為什么我得到垃圾值?

[英]Why am I getting garbage values?

我正在嘗試進行一些基本的數字遞增,但我得到了一些奇怪的垃圾值。 (這在 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);
    }

}

這個:

int countX, countY, countZ = 0;

僅初始化countZ並使countXcountY未初始化 你要:

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

如果command等於0 ,那么您正在嘗試 output 未初始化的變量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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM