在我的代码中找不到max和min

时间:2013-12-30 12:36:31

标签: c

我写了两个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();
}

2 个答案:

答案 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而未初始化xa。在这种情况下,您可能会得到任何预期或意外结果或分段错误或程序崩溃。

要解决此问题,您可以将代码修改为

代码 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); 
...
...