[英]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
,那么您正在嘗試 output 未初始化的變量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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.