Hey everyone.

im having issues with my for loop:
basically it reads in from a file using unix redirection and stores the integers into an array, that all works fine, but i need to return the number of integers that were read in, and logically i thought this would work, but i just get some crazy number. thanks for any help.

/*Reads the data from .dat file*/  
   for(i = 0; i <= MAX || ageList[i] != 0; i++)
   {
      
      scanf("%d",&ageList[i]);
      counter += 1;
   }

The whole function:

int FillAgeList(int ageList[])
{
   
   int i; 
   int counter;
   
   /*Initializes the array*/
   for(i = 0; i <= MAX; i++)
   {
      ageList[i] = -1;
   }

   counter = 0; 
   /*Reads the data from .dat file*/  
   for(i = 0; i <= MAX || ageList[i] != 0; i++)
   {
      
      scanf("%d",&ageList[i]);
      counter += 1;
   }

   /*Prints the integers*/
   for(i = 0; i <= MAX && ageList[i] != 0;i++)
   {
    	 printf("%d\n",ageList[i]);
   }
      return(counter);
}

I'd be careful with the <=, and I wish I'd spent more time looking into the 'Why doesn't this work?', but you may want to try something like this.

#include <stdio.h>
size_t FillAgeList(int ageList[], size_t size)
{
size_t i, counter = 0;
/* Reads the data from .dat file */ 
for ( i = 0; i < size; ++i )
{
	 if ( scanf("%d", &ageList[i]) != 1 || ageList[i] == 0 )
	 {
		 break;
	 }
	 ++counter;
}
/* Prints the integers */
for ( i = 0; i < counter; ++i )
{
	 printf("%d\n", ageList[i]);
}
return counter;
}	
int main(void)
{
int array[10];
size_t size = FillAgeList(array, sizeof array / sizeof *array);
printf("size = %d\n", (int)size);
return 0;
}

[edit]Oh, wait. I think this is it.

for(i = 0; i <= MAX || ageList[i] != 0; i++)

You increment i past any known values and then check to see whether this is a zero, when you've already initialized it to -1 (if you havent' wandered off the end of the array). So this might also cure things.

#include <stdio.h>
#define MAX 10
int FillAgeList(int ageList[])
{
 
int i; 
int counter;
 
/*Initializes the array*/
for(i = 0; i <= MAX; i++)
{
	 ageList[i] = -1;
}
counter = 0; 
/*Reads the data from .dat file*/ 
for(i = 0; i <= MAX; i++)
{
 
	 scanf("%d",&ageList[i]);
	 if(ageList[i] == 0)
	 {
		 break;
	 }
	 counter += 1;
}
/*Prints the integers*/
for(i = 0; i <= MAX && ageList[i] != 0;i++)
{
	 printf("%d\n",ageList[i]);
}
	 return(counter);
}	
int main(void)
{
int array [ MAX + 1 ], size = FillAgeList(array);
printf("size = %d\n", size);
return 0;
}

Hey, thanks a ton, that worked quite nicely...at least i was on the right track i suppose.

This article has been dead for over six months. Start a new discussion instead.