#include <stdio.h>
int main()
{
int res;
int max;
int i;
int Maximum;
for (i = 0 ; i < res; i++)
{
res = scanf("%d",&max);
if( res != 1 ) return 0;
if(max > Maximum)
{
Maximum = max;
}
}
printf("%d",&Maximum );
return 0;
}
大家好,我不明白为什么Maximum打印出一个淫秽的高数字。 只是想要一个理由,而不是牵着我的手,因为我真的想学习这门语言,我知道Java主要是在这里发生了什么?
答案 0 :(得分:1)
1。无需传递整数变量的地址。现在您将错误的参数传递给%d
导致未定义的行为。
printf("%d",&Maximum );
^ remove &
打印Maximum
-
printf("%d", Maximum);
2。 Maximum
在您的程序中被整合,因此,在没有初始化的情况下进行比较是不正确的。
int Maximum; // unintialized variable
在使用之前初始化它 -
int Maximum=INT_MIN; // header <limits.h>
3。你的这个循环不是无限的。它只会迭代1
时间 -
for (i = 0 ; i < res; i++)
{
//your code
}
而是使用无限循环 -
for(; ;){ // or while(1)
//your code
}
答案 1 :(得分:0)
将Maximum
初始化为某个值,该值对于所有可能的输入值都是最低的。
e.g。如果保证输入只包含正整数,那么
Maximum = -1;
或者更好地使用评论中指出的Maximum = INT_MIN;
。为此,您需要在程序中包含<limits.h>
头文件。
printf("%d",&Maximum );
这是错误的。这将打印Maximum
的地址。
使用printf("%d", Maximum);
for (i = 0 ; i < res; i++)
res
未初始化!对于无限数字,您希望将此循环设为无限while(1)
或for( ; ; )
答案 2 :(得分:0)
初始化变量Maximum
的一些值。
Maximum=0; // you can assign any value.
然后你必须改变这一行,
printf("%d",&Maximum );
进入
printf("%d",Maximum );
&Maximum
将给出整数变量的地址。在从scanf
获取输入时,我们必须这样做。
答案 3 :(得分:0)
因为程序无法知道用户是否只输入负数,只输入正数或两者,将“max”(或min)初始化为随机数(例如零),希望它“绝对”执行过程中的最大/最小值可能会在某些时候产生错误的结果。
以下是一种简单的方法,它完全依赖于用户输入,而不试图包含绝对最小/最大值的任何其他头文件。它假定第一个提供的输入为“max”,如果任何后续条目超过该值,则重置max。
#include <stdio.h>
int main(void) {
int num, max;
int first_input = 1;
while(scanf("%d", &num) != EOF){
if(first_input){
max = num;
first_input = 0;
}
else{
if(max < num){
max = num;
}
}
}
printf("\n Maximum of the scanned numbers is: %d", max);
return 0;
}
程序将继续运行,直到用户按Ctrl + D / Ctrl + Z终止输入。