我写了两个max和min的代码。第一个是没有,第二个是额外的功能。
第一个工作,但第二个最小总是1.为什么?
是什么导致了这个问题?
(1)没有功能的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int x,n,min=x,max=1,cnt;
while(1){
cnt=0;
printf("how many numbers do you want to enter\n");
scanf("%d",&n);
printf("enter your numbers\n");
while (cnt!=n){
scanf("%d",&x);
cnt++;
if(x>max)
max=x;
if(x<min)
min=x;
}
printf("maximum is:%d\n",max);
printf("minimum is:%d",min);
getch();
system("cls");
}
return 0;
}
(2)具有功能的代码:
#include <stdio.h>
#include <stdlib.h>
int maximum(int);
int main(int argc, char *argv[]) {
int n;
printf("how many numbers do you want to enter\n");
scanf("%d",&n);
maximum(n);
return 0;
}
//*****************************************
int maximum(int n){
int i,a,max=1,min=a;
printf("enter your number\n");
for(i=1;i<=n;i++){
scanf("%d",&a);
if(a>max)
max=a;
if(a<min)
min=a;
}
printf("maximum is:%d\n",max);
printf("minimum is:%d",min);
getch();
}
答案 0 :(得分:6)
您的代码会导致未定义的行为。未定义的行为意味着,任何事情都可能发生。
您尚未初始化变量a
,而您正在执行min=a;
C99部分6.7.8初始化:
If an object that has automatic storage duration is not initialized explicitly,
its value is indeterminate.
C99第3.18节未定义的行为:
Behavior, upon use of a non-portable or erroneous program construct, of erroneous
data, or of indeterminately valued objects, for which this International Standard
imposes no requirements.
这意味着,编译器可以自由地做任何事情。它可能会导致您的程序崩溃,您的程序可能会在您的显示器上打印JLo图片...等等...
答案 1 :(得分:1)
您的代码会调用未定义的行为,因为第一个分配min=x
和第二个分配min=a
而未初始化x
和a
。在这种情况下,您可能会得到任何预期或意外结果或分段错误或程序崩溃。
要解决此问题,您可以将代码修改为
代码 1。
int x,n,min,max=1,cnt;
while(1){
cnt=1;
printf("how many numbers do you want to enter\n");
scanf("%d",&n);
printf("enter your numbers\n");
scanf("%d",&x);
min = x;
while (cnt!=n){
scanf("%d",&x);
...
...
代码 2。
int maximum(int n){
int i,a,max=1,min;
printf("enter your number\n");
scanf("%d",&a);
min = a;
for(i=1;i<n;i++){
scanf("%d",&a);
...
...