c - please help really stuck on structures -


hi guys been using site while tips never posted before (first time suppose) anyway doing assignment college (manufacturing degree) basic of you. basically

the problem in search student name void near bottom program runs crashes enter name any appreciated

#include <stdlib.h> #include <stdio.h> #define size 2  struct student {     long studentid;//works     char fname[21];//works     char sname[21];//does not work     int year;//works     char course[51];//works     float results_semester_1[6];//works     float results_semester_2[6];//works     int free;  // 1 means free, 0 means not };  struct student beng[size];  int menu();   // function prototype void add_student();  // function prototype void display_students(); // function prototype void display_results(); // function prototype void search_for_student_studentid(); // function prototype void search_for_student_by_name(); // function prototype void delete_student(); // function prototype void initialise_database(); // function prototype void run_statistics_for_individual_student(); // function prototype void run_statistics_for_all_student(); // function prototype int linear_search(long); // function prototype int linear_search_sname(char); // function prototype   int main() {      initialise_database();  // call function set free positions 1      for(;;)  // infinite loop     {         switch(menu())   // calling function menu within switch         {             case 1:                 add_student();  // calling function add_student                 break;             case 2:                 delete_student();  // calling function delete_student                 break;             case 3:                 display_students(); // calling function display_students                 break;             case 4:                 search_for_student_studentid();  // calling function display_students                 break;             case 5:                 search_for_student_by_name();  // calling function display_students                 break;             case 6:                 run_statistics_for_individual_student();  // calling function display_students                 break;             case 7:                 run_statistics_for_all_student();  // calling function display_students                 break;             case 8:                 display_results();  // calling function display_students                 break;             case 9:                 printf("quitting program\n");                 exit(1);             default:                 printf("invalid option chosen\n\n");         }     }  // end of infinite loop      return 0; }  void add_student() {     int freepos = -1, i, j,k,year;      for(i = 0; < size; i++)     {         if(beng[i].free == 1)         {             freepos = i;             break;         }     }      if(freepos != -1)     {                 {             printf("enter student id:\n");             scanf("%ld", &beng[freepos].studentid);         }         while(beng[freepos].studentid<10000000 ||beng[freepos].studentid>99999999);          printf("enter firstname:\n");         scanf("%s", beng[freepos].fname);          printf("enter surname:\n");         scanf("%s", beng[freepos].sname);                  {             printf("enter year of course:\n");             scanf("%d", &beng[freepos].year);         }         while(beng[freepos].year < 1 || beng[freepos].year > 4);          printf("enter course name:\n");         scanf("%s", beng[freepos].course);          for(j = 0; j < 6; j++)         {             printf("enter result of semester 1  module %d:\n", j+1);             scanf("%f", &beng[freepos].results_semester_1[j]);         }         for(k = 0; k < 6; k++)         {             printf("enter result of semester 2  module %d:\n", k+1);             scanf("%f", &beng[freepos].results_semester_2[k]);         }          beng[freepos].free = 0;  // mark record taken     }     else         printf("no position free @ present\n"); }  void display_students() {     // output values entered     int i, j;     for(i = 0; < size; i++)     {         if(beng[i].free == 0) // print taken records         {             printf("student id: %ld:\n", beng[i].studentid);             printf("firstname: %s\n", beng[i].fname);             printf("surname: %s\n", beng[i].sname);             printf("year: %d\n", beng[i].year);             printf("course: %s\n", beng[i].course);             for(j = 0; j < 6; j++)             {                 printf("result semester 1 module %d: %0.2f\n", j+1, beng[i].results_semester_1[j]);             }  // end of             for(j = 0; j < 6; j++)             {                 printf("result semester 2 module %d: %0.2f\n", j+1, beng[i].results_semester_2[j]);             }  // end of         }  // end of if     }  // end of } void display_results() {     // output values entered     int i, j;     for(i = 0; < size; i++)     {         if(beng[i].free == 0) // print taken records         {             for(j = 0; j < 6; j++)             {                 printf("result semester 1 module %d: %0.2f\n", j+1, beng[i].results_semester_1[j]);             }  // end of             for(j = 0; j < 6; j++)             {                 printf("result semester 2 module %d: %0.2f\n", j+1, beng[i].results_semester_2[j]);             }  // end of         }  // end of if     }  // end of } int menu() {     int choice;     printf("1. add student\n");     printf("2. delete student\n");     printf("3. display students\n");     printf("4. find student using studentid\n");     printf("5. find student student surname\n");     printf("6. find student run statistics for\n");     printf("7. find statistics students\n");     printf("8. display results of students\n");     printf("9. exit program\n");          {         scanf("%d", &choice);     }     while(choice < 1 || choice > 9);      return choice; }  void initialise_database() {     int i;     for(i = 0; < size; i++) // set structure variables free 1         beng[i].free = 1; }  void delete_student() {     long search;     int position,freepos;      printf("enter number of student delete\n");     scanf("%ld",&search);      position = linear_search(search);      if ( position == -1 )         printf("%d not present in array.\n", search);     else         printf("%d present @ location %d.\n", search, position+1);     beng[position].free = 1;     return; }  void search_for_student_studentid() {     long search;     int position,j,i;      printf("enter number search\n");     scanf("%ld",&search);      position = linear_search(search);      if ( position == -1 )         printf("%d not present in array.\n", search);     else         printf("%d present @ location %d.\n", search, position+1);     printf("student id: %ld:\n", beng[position].studentid);     printf("firstname: %s\n", beng[position].fname);     printf("surname: %s\n", beng[position].sname);     printf("year: %d\n", beng[position].year);     printf("course: %s\n", beng[position].course);     for(j = 0; j < 6; j++)     {         printf("result semester 1 module %d: %0.2f\n", j+1,         beng[i].results_semester_1[j]);     }     for(j = 0; j < 6; j++)     {         printf("result semester 2 module %d: %0.2f\n", j+1, beng[i].results_semester_2[j]);     }     return; }  void search_for_student_by_name(sname) {     int position,j,i;      printf("enter surname of student search\n");     scanf("%s",&sname);      position = linear_search_sname(sname);      if ( position == 1 )         printf("%s not present in array.\n", sname);     else         printf("%s present @ location %d.\n", sname, position+1);     printf("student id: %ld:\n", beng[position].studentid);     printf("firstname: %s\n", beng[position].fname);     printf("surname: %s\n", beng[position].sname);     printf("year: %d\n", beng[position].year);     printf("course: %s\n", beng[position].course);     for(j = 0; j < 6; j++)     {         printf("result semester 1 module %d: %0.2f\n", j+1, beng[i].results_semester_1[j]);     }     for(j = 0; j < 6; j++)     {         printf("result semester 2 module %d: %0.2f\n", j+1, beng[i].results_semester_2[j]);     }      return; } int linear_search(long find) {     int c;      ( c = 0 ; c < size ; c++ )     {         if (beng[c].studentid == find )         {             return c;             break;         }     }     return -1; } int linear_search_sname(char find) {     int c;      ( c = 0 ; c < size ; c++ )     {         if (beng[c].sname[21] == find )         {             return c;             break;         }     }     return -1; } void run_statistics_for_individual_student() {     long search;     int position,j,i,k,r,max,minsums,min=100;     float sums = 0,maxsums=0;      printf("enter number search\n");     scanf("%ld",&search);     printf("the statistics student id:\n",search);      position = linear_search(search);      if ( position == -1 )         printf("%d not present in array.\n", search);     else          for(i = 0; < 6; i++)         {             sums += beng[position].results_semester_1[i];         }     printf("average grade on 6 subjects student in semester 1 %0.2f marks\n",    sums/6);      for(i = 0; < 6; i++)     {         maxsums = beng[position].results_semester_1[i];     }     if(maxsums>max)     {         max=maxsums;     }   // end of if      printf("max grade student in semester 1 %d\n", max);     {          for(k = 0; k < 6; k++)         {             if(beng[position].results_semester_1[k]<min)                 {                 min=beng[position].results_semester_1[k];             }   // end of if             }// end of         printf("min grade student in semester 2 %d\n", min);         }      for(i = 0; < 6; i++)     {         sums += beng[position].results_semester_2[i];                }     printf("average grade on 6 subjects student in semester 2 %0.2f marks\n",  sums/6);      for(i = 0; < 6; i++)     {         maxsums = beng[position].results_semester_2[i];       }        if(maxsums>max)          {         max=maxsums;     }   // end of if              printf("max grade student in semester 2 %d\n", max);         {          for(k = 0; k < 6; k++)         {             if(beng[position].results_semester_2[k]<min)                 {                 min=beng[position].results_semester_2[k];             }   // end of if             }// end of         printf("min grade student in semester 2 %d\n", min);         }     return ; }  void run_statistics_for_all_student() {      // output values entered     int i,j,k, max,min=100;     float sums,maxsums=0;     {         for(i = 0; < size; i++)              if(beng[i].free == 0) // print taken records             {                 for(j = 0; j < 6; j++)                 {                     for(i = 0; < size; i++)                     {                         sums += beng[i].results_semester_1[i];                                   } // end of                  }  // end of              }  // end of if          printf("average grade students in semester 1 %0.2f \n", sums/(size*6));      }                    {         for(k = 0; k < size; k++)              if(beng[i].free == 0) // print taken records             {                 for(j = 0; j < 6; j++)                 {                     for(i = 0; < size; i++)                     {                         maxsums = beng[i].results_semester_1[i];                       }                        if(maxsums>max)                          {                         max=maxsums;                     }                        }// end of             }// end of if     }     printf("max grade student in semester 1 is%d\n", max);        {         for(k = 0; k < size; k++)              if(beng[k].free == 0) // print taken records             {                 for(j = 0; j < 6; j++)                 {                     for(i = 0; < 6; i++)                     {                         if(beng[i].results_semester_1[i]<min)                            {                             min=beng[i].results_semester_1[i];                         }                            }// end of                 }// end of             }// end of if     }     printf("min grade student in semester 1 %d\n", min);       return ; } 

there large number of errors throughout code. of them due not slowing down , thinking each line (and part of each line). c exact language. 1 of strengths. there no such thing close enough in either syntax or logic. 1 way find of these ...oversights... compile warnings turned on. compile string program should @ minimum contain -wall -wextra. example:

gcc -wall -wextra -o student_database student_database.c 

that catch of basic syntax , variable type mismatch problems. eliminate each , every warning. compiler didn't accidentally throw them. mean something.

that being said, have eliminated warnings in code. have been through add_student function extent accept input , prevent newlines remaining in input buffer prior next entry. have corrected other areas extent resolve compiler warnings. code still needs lots of work. give start , eliminate overwhelmed feeling (for time being). work through code, @ corrections i've made. slow down -- , fine.

#include <stdlib.h> #include <stdio.h> #include <string.h>  #define size 4  struct student {     long studentid;//works     char fname[21];//works     char sname[21];//does not work     int year;//works     char course[51];//works     float results_semester_1[6];//works     float results_semester_2[6];//works     int free;  // 1 means free, 0 means not };  struct student beng[size];  int menu();   // function prototype void add_student();  // function prototype void display_students(); // function prototype void display_results(); // function prototype void search_for_student_studentid(); // function prototype void search_for_student_by_name(); // function prototype void delete_student(); // function prototype void initialise_database(); // function prototype void run_statistics_for_individual_student(); // function prototype void run_statistics_for_all_student(); // function prototype int linear_search(long); // function prototype int linear_search_sname(char*); // function prototype   int main() {      initialise_database();  // call function set free positions 1      for(;;)  // infinite loop     {         switch(menu())   // calling function menu within switch         {             case 1:                 add_student();  // calling function add_student                 break;             case 2:                 delete_student();  // calling function delete_student                 break;             case 3:                 display_students(); // calling function display_students                 break;             case 4:                 search_for_student_studentid();  // calling function display_students                 break;             case 5:                 search_for_student_by_name();  // calling function display_students                 break;             case 6:                 run_statistics_for_individual_student();  // calling function display_students                 break;             case 7:                 run_statistics_for_all_student();  // calling function display_students                 break;             case 8:                 display_results();  // calling function display_students                 break;             case 9:                 printf("quitting program\n");                 exit(1);             default:                 printf("invalid option chosen\n\n");         }     }  // end of infinite loop      return 0; }  void add_student() {     int freepos = -1;     int = 0;     int j = 0;     int k = 0;      for(i = 0; < size; i++)     {         if(beng[i].free == 1)         {             freepos = i;             break;         }     }      if(freepos != -1)     {                 {             printf("enter student id (8-digits): ");             scanf("%ld%*c", &beng[freepos].studentid);         }         while(beng[freepos].studentid<10000000 || beng[freepos].studentid>99999999);          printf("enter firstname: ");         scanf("%[^\n]%*c", beng[freepos].fname);          printf("enter surname: ");         scanf("%[^\n]%*c", beng[freepos].sname);                  {             printf("enter year of course (1-4): ");             scanf("%d%*c", &beng[freepos].year);         }         while(beng[freepos].year < 1 || beng[freepos].year > 4);          printf("enter course name: ");         scanf("%[^\n]%*c", beng[freepos].course);          for(j = 0; j < 6; j++)         {             printf("enter result of semester 1  module %d: ", j+1);             scanf("%f%*c", &beng[freepos].results_semester_1[j]);         }         for(k = 0; k < 6; k++)         {             printf("enter result of semester 2  module %d: ", k+1);             scanf("%f%*c", &beng[freepos].results_semester_2[k]);         }          beng[freepos].free = 0;  // mark record taken     }     else         printf("no position free @ present\n"); }  void display_students() {     // output values entered     int i, j;     for(i = 0; < size; i++)     {         if(beng[i].free == 0) // print taken records         {             printf("student id: %ld:\n", beng[i].studentid);             printf("firstname: %s\n", beng[i].fname);             printf("surname: %s\n", beng[i].sname);             printf("year: %d\n", beng[i].year);             printf("course: %s\n", beng[i].course);             for(j = 0; j < 6; j++)             {                 printf("result semester 1 module %d: %0.2f\n", j+1, beng[i].results_semester_1[j]);             }  // end of             for(j = 0; j < 6; j++)             {                 printf("result semester 2 module %d: %0.2f\n", j+1, beng[i].results_semester_2[j]);             }  // end of         }  // end of if     }  // end of } void display_results() {     // output values entered     int i, j;     for(i = 0; < size; i++)     {         if(beng[i].free == 0) // print taken records         {             for(j = 0; j < 6; j++)             {                 printf("result semester 1 module %d: %0.2f\n", j+1, beng[i].results_semester_1[j]);             }  // end of             for(j = 0; j < 6; j++)             {                 printf("result semester 2 module %d: %0.2f\n", j+1, beng[i].results_semester_2[j]);             }  // end of         }  // end of if     }  // end of } int menu() {     int choice;     printf("1. add student\n");     printf("2. delete student\n");     printf("3. display students\n");     printf("4. find student using studentid\n");     printf("5. find student student surname\n");     printf("6. find student run statistics for\n");     printf("7. find statistics students\n");     printf("8. display results of students\n");     printf("9. exit program\n");          {         scanf("%d", &choice);     }     while(choice < 1 || choice > 9);      return choice; }  void initialise_database() {     int i;     for(i = 0; < size; i++) // set structure variables free 1         beng[i].free = 1; }  void delete_student() {     long search = 0;     int position = 0;      printf("enter number of student delete\n");     scanf("%ld%*c",&search);      position = linear_search(search);      if ( position == -1 )         printf("%ld not present in array.\n", search);     else         printf("%ld present @ location %d.\n", search, position+1);     beng[position].free = 1;     return; }  void search_for_student_studentid() {     long search = 0;     int position = 0;     int j = 0;      printf ("enter number search: ");     scanf ("%ld%*c",&search);      position = linear_search (search);      if ( position == -1 )         printf("%ld not present in array.\n", search);     else         printf("%ld present @ location %d.\n", search, position+1);     printf("student id: %ld:\n", beng[position].studentid);     printf("firstname: %s\n", beng[position].fname);     printf("surname: %s\n", beng[position].sname);     printf("year: %d\n", beng[position].year);     printf("course: %s\n", beng[position].course);      for(j = 0; j < 6; j++)     {         printf("result semester 1 module %d: %0.2f\n", j+1,         beng[position].results_semester_1[j]);     }      for(j = 0; j < 6; j++)     {         printf("result semester 2 module %d: %0.2f\n", j+1, beng[position].results_semester_2[j]);     }      return; }  void search_for_student_by_name (char *sname) {     int position = 0;     int j = 0;      printf("enter surname of student search\n");     scanf("%[^\n]%*c", sname);      position = linear_search_sname(sname);      if ( position == 1 )         printf("%s not present in array.\n", sname);     else         printf("%s present @ location %d.\n", sname, position+1);     printf("student id: %ld:\n", beng[position].studentid);     printf("firstname: %s\n", beng[position].fname);     printf("surname: %s\n", beng[position].sname);     printf("year: %d\n", beng[position].year);     printf("course: %s\n", beng[position].course);     for(j = 0; j < 6; j++)     {         printf("result semester 1 module %d: %0.2f\n", j+1, beng[position].results_semester_1[j]);     }     for(j = 0; j < 6; j++)     {         printf("result semester 2 module %d: %0.2f\n", j+1, beng[position].results_semester_2[j]);     }      return; } int linear_search(long find) {     int c = 0;      ( c = 0 ; c < size ; c++ )         if (beng[c].studentid == find )             return c;      return -1; } int linear_search_sname(char *find) {     int c = 0;      ( c = 0 ; c < size ; c++ )         if (strcmp (beng[c].sname, find) == 0 )             return c;      return -1; } void run_statistics_for_individual_student() {     long search = 0;     int position = 0;     int = 0;     int k = 0;     int max = 0;     int min = 100;     float sums = 0,maxsums=0;      printf("enter number search\n");     scanf("%ld",&search);     printf("the statistics student id (%ld):\n",search);      position = linear_search(search);      if ( position == -1 )         printf("%ld not present in array.\n", search);     else          for(i = 0; < 6; i++)         {             sums += beng[position].results_semester_1[i];         }     printf("average grade on 6 subjects student in semester 1 %0.2f marks\n",    sums/6);      for(i = 0; < 6; i++)     {         maxsums = beng[position].results_semester_1[i];     }     if(maxsums>max)     {         max=maxsums;     }   // end of if      printf("max grade student in semester 1 %d\n", max);     {          for(k = 0; k < 6; k++)         {             if(beng[position].results_semester_1[k]<min)                 {                 min=beng[position].results_semester_1[k];             }   // end of if             }// end of         printf("min grade student in semester 2 %d\n", min);         }      for(i = 0; < 6; i++)     {         sums += beng[position].results_semester_2[i];                }     printf("average grade on 6 subjects student in semester 2 %0.2f marks\n",  sums/6);      for(i = 0; < 6; i++)     {         maxsums = beng[position].results_semester_2[i];       }        if(maxsums>max)          {         max=maxsums;     }   // end of if              printf("max grade student in semester 2 %d\n", max);         {          for(k = 0; k < 6; k++)         {             if(beng[position].results_semester_2[k]<min)                 {                 min=beng[position].results_semester_2[k];             }   // end of if             }// end of         printf("min grade student in semester 2 %d\n", min);         }     return ; }  void run_statistics_for_all_student() {      // output values entered     int i,j,k, max,min=100;     float sums,maxsums=0;     {         for(i = 0; < size; i++)              if(beng[i].free == 0) // print taken records             {                 for(j = 0; j < 6; j++)                 {                     for(i = 0; < size; i++)                     {                         sums += beng[i].results_semester_1[i];                                   } // end of                  }  // end of              }  // end of if          printf("average grade students in semester 1 %0.2f \n", sums/(size*6));      }                    {         for(k = 0; k < size; k++)              if(beng[i].free == 0) // print taken records             {                 for(j = 0; j < 6; j++)                 {                     for(i = 0; < size; i++)                     {                         maxsums = beng[i].results_semester_1[i];                       }                        if(maxsums>max)                          {                         max=maxsums;                     }                        }// end of             }// end of if     }     printf("max grade student in semester 1 is%d\n", max);        {         for(k = 0; k < size; k++)              if(beng[k].free == 0) // print taken records             {                 for(j = 0; j < 6; j++)                 {                     for(i = 0; < 6; i++)                     {                         if(beng[i].results_semester_1[i]<min)                            {                             min=beng[i].results_semester_1[i];                         }                            }// end of                 }// end of             }// end of if     }     printf("min grade student in semester 1 %d\n", min);       return ; } 

use/output:

./bin/student_database 1. add student 2. delete student 3. display students 4. find student using studentid 5. find student student surname 6. find student run statistics 7. find statistics students 8. display results of students 9. exit program 1 enter student id (8-digits): 12345678 enter firstname: johnny enter surname: walker enter year of course (1-4): 1 enter course name: underwatermusic enter result of semester 1  module 1: 88.8 enter result of semester 1  module 2: 89.8 enter result of semester 1  module 3: 90.8 enter result of semester 1  module 4: 91.0 enter result of semester 1  module 5: 68.7 enter result of semester 1  module 6: 66.7 enter result of semester 2  module 1: 92.4 enter result of semester 2  module 2: 88.4 enter result of semester 2  module 3: 82.3 enter result of semester 2  module 4: 95.3 enter result of semester 2  module 5: 91.2 enter result of semester 2  module 6: 88.5 1. add student 2. delete student 3. display students 4. find student using studentid 5. find student student surname 6. find student run statistics 7. find statistics students 8. display results of students 9. exit program 3 student id: 12345678: firstname: johnny surname: walker year: 1 course: underwatermusic result semester 1 module 1: 88.80 result semester 1 module 2: 89.80 result semester 1 module 3: 90.80 result semester 1 module 4: 91.00 result semester 1 module 5: 68.70 result semester 1 module 6: 66.70 result semester 2 module 1: 92.40 result semester 2 module 2: 88.40 result semester 2 module 3: 82.30 result semester 2 module 4: 95.30 result semester 2 module 5: 91.20 result semester 2 module 6: 88.50 1. add student 2. delete student 3. display students 4. find student using studentid 5. find student student surname 6. find student run statistics 7. find statistics students 8. display results of students 9. exit program 9 quitting program 

additional suggestions

one suggestion have not statically declare string sizes in function , allocate needed in add_student function. example:

struct student {     long studentid;//works     char *fname;//works     char *sname;//does not work     int year;//works     char *course;//works     float results_semester_1[6];//works     float results_semester_2[6];//works     int free;  // 1 means free, 0 means not }; 

then allow scanf dynamically allocate memory needed example:

scanf("%m[^\n]%*c", &beng[freepos].fname); 

additionally, see had change scanf format strings in add_student prevent newline remaining in input buffer (the result of pressing [enter]) causing program skip on next input. controlling state of input buffer critical. there number of ways this, taking careful @ man scanf place start.


Comments

Popular posts from this blog

python - mat is not a numerical tuple : openCV error -

c# - MSAA finds controls UI Automation doesn't -

wordpress - .htaccess: RewriteRule: bad flag delimiters -