find the max value in an array ?
can anyone tell me whats wrong with this program ?
i've just learned what are arrays so don't know much about it, i want to write a program that prints the max value inside an array.
i wrote this:

int main(void)
{
int temp[2];
int i,max=0;
for (i=0;i<2;i++)
	{
	printf ("Enter value for Temperature %d:",i);
	scanf ("%d",&temp[i]);
	}
		for (i=0;i<2;i++)
		{
                max=temp[i];
		if (temp[i]>max)
		printf ("%d ",temp[i]);
                }
getche ();
}

but this is not working :(

Dani AI

Generated

Two quick faults buried in the original posts explain the behaviour: the max variable was either left uninitialized (undefined behaviour) or forced to 0 (wrong when every input is negative), and in one fragment max was being set from the current element immediately before testing the element against max — that test can never succeed. 's point about consistent indentation and brace placement is important here because misplaced braces hide the real loop scope and make these logic errors hard to spot.

A reliable pattern that avoids both problems is: read at least one element, initialize max (and min if needed) from that first element, then scan the remaining elements updating max/min as you go. If the array may be empty, handle that as an error; if you prefer a sentinel, use INT_MIN/INT_MAX from <limits.h> instead.

Example (robust, single pass, checks input):

#include <stdio.h>
#include <stddef.h>

void find_max_min(const int *a, size_t n, int *max, int *min)
{
    if (n == 0) return; /* handle empty array as needed */
    *max = *min = a[0];
    for (size_t i = 1; i < n; ++i) {
        if (a[i] > *max) *max = a[i];
        if (a[i] < *min) *min = a[i];
    }
}

int main(void)
{
    int arr[5];
    size_t n = sizeof arr / sizeof arr[0];
    for (size_t i = 0; i < n; ++i)
        if (scanf("%d", &arr[i]) != 1) return 1;
    int max, min;
    find_max_min(arr, n, &max, &min);
    printf("max=%d, min=%d\n", max, min);
    return 0;
}

Practical checks and tips: validate scanf return values, compile with warnings enabled (gcc -Wall -Wextra), avoid non-standard getche(), prefer size_t for sizes and sizeof to compute array length, and initialize variables before reading them. This ties back to 's initialization idea and /'s single-pass/function approaches but packages them into a small, robust pattern suitable for larger arrays.

Recommended Answers

All 12 Replies

you're using i as the iterator for both of the nested for loops! ;)

And why are using two loop for this? You only have 2 elements in your array to fill up.

Can't you get rid of the inner for loop?

The way to do this is to set max equal to the temp, ONLY if the temp entered is greater than the value of max.

make sense?

that is not the nested loop, it is just used to print the values (as mentioned in the book), anyways here it is the program without it,

int main(void)
{
int temp[2];
int i,max=0;
for (i=0;i<2;i++)
	{
	printf ("Enter value for Temperature %d:",i);
	scanf ("%d",&temp[i]);
	}
		{
                max=temp[i];
		if (temp[i]>max)
		printf ("%d ",temp[i]);
                }
getche ();
}

how can i print the max value ?

Xufyan, you are going to *have* to learn to indent your code and especially your braces, like you are sane - even if you're not ;)

for(i = 0; i < whatEver; i++)
{
    //other code in here, then:
}

Note how the braces line up with the first line of code - their "parent line". Your eye just flows, right to the major and minor lines of code, and it only gets better as you code more often.

You indent your code like that, and you'll see the answer. You print max temp right after the last closing brace of the for loop.

Why?

Because you're done entering data.

commented: lol. i agree, that drives me nuts. +7

You only need one for loop:

for(i = 0; i < 2; i++)  
{
  Ask for the user to enter a temp
  user enters a temp
  You check the user's entered number to see if it's greater than 
  max  temp
  
  Now print the number user entered

}
print max temp
commented: thanks :-) +0

thanks :)
i've done the program and it is working, can you tell me now that why my program isn't working when i'm not assigning '0' to max ?

here is the program,

int main(void)
{
int num[5];
int i,max=0;
for (i=0;i<5;i++)
	{
	printf ("Enter value for Temperature %d:",i);
	scanf ("%d",&num[i]);
	if (num[i]>max)
	max=num[i];
	}
		printf ("%d ",max);
        
getche ();
}

this program is not working when i'm assigning no value for max, why ?
and i didn't understand how my program is checking that the entered numbers are greater than max temp bec0z max is assigned for 0

You only need one for loop:

for(i = 0; i < 2; i++)  
{
  Ask for the user to enter a temp
  user enters a temp
  You check the user's entered number to see if it's greater than 
  max  temp
  
  Now print the number user entered

}
print max temp

problem solved, thanks alot :) i've understood
another question:
how to print minimum value ?
for minimum value should i've to assigned the largest value for min while initializing

# include<stdio.h>


int main()
{ int a[10];

int max= retmax(a);

printf("max="%d"",max);
}

int retmax(int a)
{
int i,j;

for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a>a[j])
{int temp;
temp=a;
a=a[j];
a[j]=temp;
}


}
return a[10];
}
}

}

}

commented: Don't you know how to properly code tag and format you posted code? -2

try it n dear teamp stands fr temporary not for temperature

int main(void)
{
int temp[2];
int i,max;
for (i=0;i<2;i++)
    {
    printf ("Enter value in an array %d:",i);
    scanf ("%d",&temp[i]);
    } 
                   max=temp[0];
        for (i=1;i<2;i++)
        {
        if (temp[i]>max)
                max=temp[i]  
                }
             printf("max no in array=%d",max);
getche ();
}

but this is not working :(

# include<stdio.h>


int main()
{ int a[10];

int max= retmax(a);

printf("max="%d"",max);
}

int retmax(int a)
{
int i,j;

for(i=0;i<10;i++)
{
    for(j=i+1;j<10;j++)
  {
       if(a[i]>a[j])
    {  int temp;
       temp=a[i];
       a[i]=a[j];
       a[j]=temp;
    }


   }
return a[10];
}
}

}

}

this will help in finding both maximum and minimum

int main(void)
{
     int temp[2];   // two element array
     int i,max;
     for (i=0;i<2;i++)    // read 2 numbers into the array
    {   
           printf ("\nEnte value %d into array.",i);
           scanf("%d",&temp[i]);
          }

      //Now find max val in the array.
         max = temp[0];  // first element in the array is stored as max
     for (i=1;i<2;i++)    /
    {   
           if(temp[i] > max)  // if second element is bigger than the first
             {
         //these pair of braces are not compulsory,for a single statement.  
              max = temp[i] ;   // every statement must end with a ;
             }
          }
     printf("Max value = %d",max);
     return 0;      // as main is int type  
 }             
/*   Note : In one of the above post, you are missing a ; at line 14,   otherwise it is OK  - Biju Joseph N, Kerala, India*/
#include<stdio.h>
#include<conio.h>

int MAX(int []);


int main()
{
int arr[5]={1,2,45,36,65};

int max=MAX(arr);
printf("MAx=%d",max);
return 0;
}

int MAX(int a[])
{ int i,j;

  for(i=0;i<5;i++)
  {
  for(j=i+1;j<5;j++) 
    {
    if(a[i]>a[j])
     { a[i]=a[i]+a[j];
       a[j]=a[i]-a[j];
       a[i]=a[i]-a[j];  //swapping

     } 
    }
  }

 return a[4];
}

THIS IS WORKING :):)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.