2017-06-17 104 views
1

我正在实现一个简单的程序,用C查找数组中的最大和最小元素。但是在某些情况下,我得到了意想不到的输出。请检查this输出。请检查下面的代码。根据输入没有得到所需的输出

#include<stdio.h> 
#include<stdlib.h> 

int largest(int *input) 
{ 
    int i=0,large=0; 
    for(;i<input[i]!='\0';i++) 
    { 
     if(input[i]>large) 
      large=input[i]; 
    } 
    return large; 
} 

int smallest(int *input) 
{ 
    int i=0,small; 
    small=input[i]; 
    for(;i<input[i]!='\0';i++) 
    { 
     if(input[i]<small) 
      small=input[i]; 
    } 
    return small; 
} 

void main() 
{ 
    int *input; 
    int size,i=0,large,small; 
    printf("Enter size of array:\n"); 
    scanf("%d",&size); 
    printf("Enter Numbers:\n"); 
    input=(int *)malloc(size * sizeof(int)); 
    for(;i<size;i++) 
    { 
     scanf("%d",input+i); 
    } 
    large=largest(input); 
    printf("Largest element is:%d, ",large); 
    small=smallest(input); 
    printf("Smallest element is:%d\n",small); 
} 

当我将大小传递给函数时,程序工作正常。

int largest(int *input,int size) 
{ 
    int i=0,large=0; 
    for(;i<size;i++) 
    { 
     if(input[i]>large) 
      large=input[i]; 
    } 
    return large; 
} 

output通过执行上述功能。

我不明白这里发生了什么。请帮我找到解决办法。

+1

'我的'input = calloc(size +1,sizeof(int));') – BLUEPIXY

+0

@BLUEPIXY是的,它通过使用calloc函数来完美工作。感谢您的帮助。但是我仍然不明白为什么它在使用malloc时不工作?你能解释一下吗? –

+1

您正试图与'0'进行比较,但它并不存在于输入数据的任何地方。 – BLUEPIXY

回答

0

不要指望由malloc()分配的内存初始化为zero

for(;i<input[i]!='\0';i++) 

这里i<input[i]!='\0'甚至不会,如果你的目的是要确定一个数组(其值是0)的工作进行到底。在这种情况下,您应该将最后一个元素初始化为0,并将表达式修改为input[i]!=0

你必须保持分配的内存大小的轨迹,它作为一个参数传递,如果它被视为一个数组

0

这里是解决方案:

#include<stdio.h> 
    main(){ 
    int count, i, j, k; 
    float all_number[15],temp; 
    printf("\n Enter the number of input : "); 
    scanf("%d",&count); 
    for(i=0;i< count;i++){ 
     printf("\n Enter %d element : ",i); 
     scanf("%f",&all_number[i]); 
    } 
    for(j=0; j<count ; j++){ 
     for(k = j+1; k <count; k++){ 
      if(all_number[j] > all_number[k]){ 
       temp = all_number[j]; 
       all_number[j] = all_number[k]; 
       all_number[k] = temp; 
      } 
     } 
    } 

    printf("\n lowest %d element : %f",i,all_number[0]); 
    printf("\n highest%d element : %f",i,all_number[count]); 
} 
+1

欢迎来到StackOverflow并感谢您的帮助。请考虑通过解释解决方案是什么来改进您的答案。代码中的注释是这样做的简单方法。在这里不太了解代码的答案。顺便说一句,您可能会喜欢获得您的第一张参加[巡演]的徽章。 – Yunnosch

+1

欢迎来到Stack Overflow。请尽快阅读[关于]和[回答]页面。一般来说,解释一下你在做什么是一个好主意。目前尚不清楚可以对数据进行排序;当然没有必要对数据进行排序以确定最大和最小。 –

+1

@Yunnosch:我想伟大的思想都一样...... –