[英]Why %d is showing 0 in my c program output?
該程序是在所有輸入的整數中找到最大的數。 它要求用戶輸入一個數字 10 次或按 0 退出,以較早者為准。 但是,output 不如預期。 如果您能幫助新手,我將不勝感激。
#include <stdio.h>
int main()
{
int num[10];
int max, a;
for (a = 0; a < 10; a++)
{
printf("Enter the integer: ");
scanf("%d", &num[a]);
if (num[a] == 0)
break;
}
for(a = 0; a < 10; a++)
{
num[0] = max;
if(max < num[a])
{
num[a] = max;
}
}
printf("This is the largest integer: %d", max); //The output is coming wrong here.
return 0;
}
#include <limits.h>
int max = INT_MIN;
此外,您還需要按如下方式更改第二個 for 循環,以便在迭代時更新 max 變量,而不是 num[] 變量。 如果您之前已經假設 max 是第一個元素,則循環變量從 1 開始,否則循環變量將從 0 開始。
for(a = 1; a < 10; a++) // a=0 if max was initialized to INT_MIN above
{
if(num[a]>max)
{
max = num[a];
}
}
您永遠不會分配max
變量。
您要做的是檢查輸入的值是否大於您之前輸入的每個值,因此您需要使用以下條件:
if (num[a] > max)
max = num[a];
您還需要將max
初始化為某個值(比方說,如果您希望只有正整數,它可能是0
,但請查看Jigsaw答案以獲得更好的解決方案): int max = 0;
.
並最終添加一個if-condition
來檢查max
是否為0
,這樣您就知道是否沒有輸入任何值:
if(max == 0)
printf("No values have been entered.");
else printf("This is the largest integer: %d", max);
請注意,您可以在同一個 for 循環中分配num
和 update max
的元素,因此第二個 for 變得完全無用,您可以將其刪除:
#include <stdio.h>
int main()
{
int num[10];
int max = 0, a;
for (a = 0; a < 10; a++)
{
printf("Enter the integer: ");
scanf("%d", &num[a]);
if (num[a] == 0)
break;
if (num[a] > max)
max = num[a];
}
if(max == 0)
printf("No values have been entered.");
else printf("This is the largest integer: %d", max);
return 0;
}
我建議你打開你的編譯器警告,尤其是-Wall
和-Wextra
,這樣你會注意到這樣的問題:
<source>: In function 'main':
<source>:17:16: warning: 'max' may be used uninitialized [-Wmaybe-uninitialized]
17 | num[0] = max;
| ~~~~~~~^~~~~
<source>:6:9: note: 'max' was declared here
6 | int max, a;
| ^~~
您既不初始化也不向變量max
寫入任何值。 使用未初始化的變量是未定義的行為。
您似乎知道如何將 0 a
. 但是對於max
,你似乎把它顛倒了。 請記住,with =
右邊的值進入到左邊的變量中。
要解決此問題,請轉動任何something = max;
在您的代碼中出現max = something;
.
對於初學者來說,這個 for 循環
for (a = 0; a < 10; a++)
{
printf("Enter the integer: ");
scanf("%d", &num[a]);
if (num[a] == 0)
break;
}
由於條件,可以在數組num
中輸入少於10
元素
if (num[a] == 0)
break;
所以下一個循環必須准確地遍歷數組a
元素而不是10
。 因此,在下一個循環中,您必須為索引使用另一個變量,例如
for( int i = 0; i < a; i++)
變量max
未初始化
int max, a;
因此,此 for 循環調用未定義的行為,其中變量max
被分配給數組元素或與數組元素進行比較。
for(a = 0; a < 10; a++)
{
num[0] = max;
if(max < num[a])
{
num[a] = max;
}
}
此外,變量max
在 for 循環中沒有改變。 所以整個循環沒有意義。
注意用戶可以一次輸入0
。 因此該數組將不包含任何有效值。 在這種情況下,數組沒有最大值。
例如,您的程序可以通過以下方式查看
#include <stdio.h>
int main( void )
{
enum { N = 10 };
int num[N];
int i = 0;
do
{
printf( "Enter the integer (0 - stop): " );
scanf( "%d", &num[i] );
} while ( num[i] != 0 && ++i < N );
int max_i = 0;
for ( int j = 1; j < i; j++ )
{
if ( num[max_i] < num[j] )
{
max_i = j;
}
}
if ( i == 0 )
{
puts( "You have not entered numbers unequal to zero." );
}
else
{
printf("This is the largest integer: %d", num[max_i] );
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.