954,480 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

2d array gives error when inputting data

Hey,

I am new here. I just started coding in C a couple of weeks ago. I am trying to create a simple program to input data into an array using a text file with 10 records. However, the array length is 16 and a couple of records in the middle have random generated data. Please help. Thanks.

Sample text file:
Postcode Month Year Bedrooms Price
2081 12 2007 4 795500
2180 7 2009 6 165000
2140 12 2008 5 689000
2153 3 2008 4 491500
2140 2 2010 5 886500
2005 11 2007 4 776500
2151 7 2007 5 305500
2199 12 2010 5 895000
2101 4 2010 7 389500
2176 2 2008 2 959500

//skip the header line
  while (getchar()!='\n') {
  }

  int len = 0; //total number of records inputted
  int home[][5]={{0},{0},{0},{0},{0}}; //introduce the array, [0] = postcode, [1] = month, [2] = year, [3] = bedrooms, [4] = price
  int input = scanf("%d%d%d%d%d", &home[len][0], &home[len][1], &home[len][2], &home[len][3], &home[len][4]);
  
  while (input != EOF) { 
    len++;
    input = scanf("%d%d%d%d%d", &home[len][0], &home[len][1], &home[len][2], &home[len][3], &home[len][4]);
  }

  //printing inputted information into table form
  print_format(1);
  printf("%d", len);
  printf("|  %4d   %02d   %4d   %2d   %8d |\n", home[7][0], home[7][1], home[7][2], home[7][3], home[7][4]);


P.S. Also, I get an error when printing one record of an array. eg i can print fine using home[0][0] but have a problem when i use a = 0; home[a][0]; it gives a segmentation error.

Attachments sample10.txt (0.41KB) task2.c (7.43KB)
jksdua
Newbie Poster
3 posts since Apr 2010
Reputation Points: 17
Solved Threads: 0
 

declare your variables at the top of main()... before your while loop.

declare your array 'home' size properly.

jephthah
Posting Maven
2,587 posts since Feb 2008
Reputation Points: 2,143
Solved Threads: 179
 

Thanks a lot for that. Simply putting the number of rows instead of leaving it empty did the trick. I have one more question:

I am trying to create one more array which looks at this home array and records this into a new array based on postcode. If it already exists, it adds to the number of sales. However, again this segmentation fault keeps stuffing me over.

I 'd appreciate any help.

//introduce 2d array that record the number of sales and their average price in each postcode 
  int pcode_sale[10000][3]={}; // [0] = postcode, [1] = no of sales, [2] = total sales
  int pcode_len = 0; int pcode_index = 0;  int exist = 0;

  pcode_sale[0][0] = home[0][0];
  pcode_sale[0][1] = 1;
  pcode_sale[0][2] = home[0][4];
  
  for (index=1; index < len; index++) {  //it goes through the home array recording each element
    while (pcode_index < pcode_len || exist == 0) {  //goes through pcode_sale array to check whether postcode already exists
      if (pcode_sale[pcode_index][0] == home[index][0]) {  
        exist = 1;
      }
      pcode_index++;
    }
    if (exist == 1) {
      pcode_sale[pcode_len][1] = pcode_sale[pcode_len][1] + 1;  //if it does exist increment number of sales
      pcode_sale[pcode_len][2] = pcode_sale[pcode_len][2] + home[index][4];  //and add to total price
    } else {  //else add new record
      pcode_len++;
      pcode_sale[pcode_len][0] = home[index][0];
      pcode_sale[pcode_len][1] = 1;
      pcode_sale[pcode_len][2] = home[index][4];
    }    
  }
jksdua
Newbie Poster
3 posts since Apr 2010
Reputation Points: 17
Solved Threads: 0
 

Did you forget to reset pcode_index and exist?

chiwawa10
Junior Poster
156 posts since Jul 2005
Reputation Points: 88
Solved Threads: 27
 

mate i see what u mean, after my own post I realised about the index and after I looked at yours I have neutralised exist as well but to no avail.

I have tried debugging it so many different ways to no avail. Think I might have to give up and look at someone else's way of doing the same thing.

If it makes it easier, my logic is to go through every single record in the home array and add it to postcode array. If the postcode exists, it simply adds to the number of sales and then movews onto the next record.

My code right now:

//introduce 2d array that record the number of sales and their average price in each postcode 
  int pcode_sale[10000][3]={}; // [0] = postcode, [1] = no of sales, [2] = total sales
  int pcode_len = 0;
  int pcode_index = 0;  
  int exists = 0;

  pcode_sale[0][0] = home[0][0];
  pcode_sale[0][1] = 1;
  pcode_sale[0][2] = home[0][4];
    
  for (index=1; index < len; index++) {
    while (pcode_index < pcode_len && exists == 0) {  //goes through pcode_sale array to check whether postcode already exists
      if (pcode_sale[pcode_index][0] == home[index][0]) {  
        exists = 1;
      } 
      pcode_index++;
    }
    //printf("%d", pcode_index);
    if (exists == 1) {
      printf("yeh");
      //pcode_sale[pcode_len][1] = pcode_sale[pcode_len][1] + 1;  //if it does exist increment number of sales
      //pcode_sale[pcode_len][2] = pcode_sale[pcode_len][2] + home[index][4];  //and add to total price
    } else {  //else add new record
      pcode_len++;
      pcode_sale[pcode_len][0] = home[index][0];
      pcode_sale[pcode_len][1] = 1;
      pcode_sale[pcode_len][2] = home[index][4];
    }
    exists = 0;
    pcode_index = 0; //neutralise pcode for next record  
  }
jksdua
Newbie Poster
3 posts since Apr 2010
Reputation Points: 17
Solved Threads: 0
 

the problem here is that an array index is increasing beyond the boundaries of your array size, and trying to access memory that has not been allocated.

fix this

for (index=1; index < len; index++) {


.

jephthah
Posting Maven
2,587 posts since Feb 2008
Reputation Points: 2,143
Solved Threads: 179
 

and chiwawa10, i'm flattered that you feel the urge to copy me, but please go ahead and find yourself another icon/avatar to use, and not steal mine.[/B].

that's not a stock avatar; it's not a coincidence that you picked the same avatar from some pool of images. that's one that i searched out on my own and personally trimmed to fit the specific pixel ratio for this site.

jephthah
Posting Maven
2,587 posts since Feb 2008
Reputation Points: 2,143
Solved Threads: 179
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: