2015-09-06 83 views
-4

我正在做一个简单的函数,它返回从用户(数组)中给出的数字的最小整数。C最小函数总是返回2686916

但是,它总是在最后打印2686916。这里是我的代码:

int function() 
{ 
    int ar[100]; 
    int i; 
    int smallest = INT_MAX; 
    int nums; 
    int num; 
    int sum=0; 
    printf("\nenter array size\n"); 

    scanf("%d",&num); 
    for(i=0;i<num;i++) 
    { 
     scanf("%d",&ar[i]); 
     sum=sum+ar[i]; 
    } 
    if (nums <smallest){ 
     smallest=nums; 
     printf("the smallest %d\n,smallest); 
     return 0; 
    } 
} 

我不知道我在做什么错。

+6

在您检查其值之前,您没有设置'nums',并且如果您注意到编译器警告,您将会知道这一点。而“2686916”并不是最大的整数,因为最小的研究会告诉你。 “最小”被设置为最大整数值。 –

+1

不仅如此,你的函数甚至不会返回最小值,编译器会告诉你。它要么返回'0',要么返回一个未定义的值。 –

+0

好吧,首先,我的意思是它不打印。我希望它只是打印最小整数,而不是返回它。并且它始终打印2686916.INT_MAX链接到“最小”变量,因此它与我的意思相同。不知道如何解决这个问题,同时保持数组循环即时通讯。谢谢 –

回答

0

我的朋友,你似乎是C的新手,而在你问这样的问题之前,你应该尝试按照C的一些教程。你可能会尝试类似this

如果您提出的问题不明确,或者您发布的代码无法编译,则很难帮助您。现在这是我能做的全部:

int function() 
{ 
    int ar[100]; 
    int i; 
    int smallest = INT_MAX; 
    int nums = 0; //Always Initialize your variables! 
    int num = 0; 
    int sum= 0; 
    printf("\nenter array size\n"); 

    scanf("%d",&num); 
    for(i=0;i<num;i++) 
    { 
    scanf("%d",&ar[i]); 
    sum=sum+ar[i]; 
    } 
    if (nums <smallest) 
    { 
    smallest=nums; 
    printf("the smallest %d\n",smallest); 
    } 
    return 0; //Don't put this in a place that might not be executed! 
} 

现在至少它应该编译,它仍然没有做任何有用的,据我所知。你比较“nums”,一个你以前没有使用的变量和int的最大值,将它设置为从未使用过的“nums”并打印出来。

您可能希望在if语句中使用“sum”或“ar [i]”,然后打印其中一个值(仍然不是100%确定要执行的操作)。

下一次的一些技巧(你问一个问题之前!):

  • 变量应该总是被初始化

在你的代码尝试之前,用“NUMS”的价值获得一个值,这可能会导致代码中出现错误或奇怪的结果。

  • 不要放在可能被跳过的地方返回,

在代码中,“NUMS”会比“最小”(不太可能,例如比特),代码大会跳过if语句并永远不会返回。

  • 阅读编译器警告

您发布不能编译,看了你的错误和警告,并修复他们的代码。

  • (tip)使用更好的变量名称,使用像nums,num和sum这样的名称可以轻松地忽略错误。