Click here to Skip to main content
15,903,030 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
C#
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char **first_name, **last_name;
float *score;
int entry;
void print();
void search_lastname(char search_last_name[21]);
int main()
{
int i,option;
char search_last_name[21];
do
    {
    printf("\nPlease indicate the number of records you want to enter (The minimum number of entries is 5) :");                     /*Input of number of records. */
    scanf("%d",&entry);
    }
while(entry<=4);
score=(float*)malloc(entry*sizeof(float));
first_name=(char**)malloc(entry*sizeof(char*));
last_name=(char**)malloc(entry*sizeof(char*));
for(i=0;i<entry;i++)
    {
    first_name[i]=(char*)malloc(21*sizeof(char));
    last_name[i]=(char*)malloc(21*sizeof(char));
    }
printf("Please input records of students (enter a new line after each record), with following format first name last name score \n");
for(i=0;i<entry;i++)
    {
    scanf("%s%s%f",&first_name[i],&last_name[i],&score[i]);                                                             /*Input of records itself*/
    }
do
{
    printf("\nPlease choose the appropriate options :");                                                /*Switch statement for choosing options.*/
    printf("\nPrint records (press 1)\nAdd a new record (press 2)\nDelete records (press 3)\nSearch by last name (press 4)\nSort by score (press 5)\nSort by last name (press 6)\nFind Median score (press 7)\nExit the Program (press 0)");
    scanf("%d",&option);
    switch(option)
        {
        case 1  :print();
            break;
        case 2  :
            break;
        case 3  :
            break;
        case 4  :
            printf("\n Please enter the last name you want to search: ");
            scanf("%s",search_last_name);
            search_lastname(search_last_name);
            break;
        case 5  :
            break;
        case 6  :
            break;
        case 7  :
            break;
        case 0  :
            break;
        default : printf("\n Please enter a valid option.");

}
}
while(option>=1 && option<=7);
return 0;
}

void print()
{
int i;
printf("\n The records of students are as follows :");
for(i=0;i<entry;i++)
    {
    printf("\nFirst name:%s, Last name:%s, Score:%f\n",&first_name[i],&last_name[i],score[i]);
    }
}


void search_lastname(char search_last_name[21])                                     /*Funtion to search by last name*/
{
int i,counter=0;
for(i=0;i<entry;i++)
    {
    printf("\nf");
    if(strcmp(search_last_name,last_name[i])==0)
        {
        printf("\nf");
        printf("\nFirst name:%s, Last name:%s, Score:%f\n",first_name[i],last_name[i],score[i]);
        }
    }

}
Posted

1 solution

The error appears to happen even earlier, when you read the first and last names:
C++
for(i=0;i<entry;i++)>
{
  scanf("%s%s%f",&first_name[i],&last_name[i],&score[i]);                             
}

This should probably read:
C++
for (i = 0; i < entry; i++)
  scanf("%s%s%f", first_name[i], 
        last_name[i], &score[i]);                             

You made last_name[i] to be a pointer to a buffer that can accept a string. By putting an ampersand before last_name, you are overwriting the buffer pointer. And when later accessing memory using this destroyed pointer, things go south.
 
Share this answer
 
Comments
nv3 24-Apr-15 16:45pm    
Are any of your string inputs longer than 20 characters? That might overwrite some memory.

Tried using the debugger? That would show the error right away.
[no name] 24-Apr-15 18:33pm    
It worked. thanks

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900