为什么我得到垃圾值?
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
并保留 countX
和 countY
未初始化。你想要:
int countX = 0, countY = 0, countZ = 0;
如果 command
等于 0
那么您正在尝试输出具有不确定值的未初始化变量 countX
和 countY
。
你应该在它们的声明中初始化它们,比如
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);
}
}
我正在尝试进行一些基本的数字递增,但我得到了一些奇怪的垃圾值。 (这适用于 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
并保留 countX
和 countY
未初始化。你想要:
int countX = 0, countY = 0, countZ = 0;
如果 command
等于 0
那么您正在尝试输出具有不确定值的未初始化变量 countX
和 countY
。
你应该在它们的声明中初始化它们,比如
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);
}
}