Member 13887243 Ответов: 2

Как найти, кто моложе из списка возраста человека, приведенного в текстовом файле с помощью C?


Текстовый файл содержит список имен,возраста и пола 10 человек.Вы должны найти того, кто имеет минимальный возраст, и напечатать то же самое.
Содержимое текстового файла:
suresh		10	male 
ram		20	male
sita		20	female
paresh		25	male
anish		18	male
rajasree	30	female
gita		35	female
asutosh		28	male
shubham		21	male
suman		39	male


Выход:
Суреш-младший возраст которых составляет 10

Что я уже пробовал:

Незаконченный код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
int i,j,temp;
struct
{
    char name[40];
    int age;
    char sex[10];
}person[9];
void main()
{
    FILE *fp;
    fp=fopen("candidate.txt","r");
    char a[10];
    int val;
    if((fp=fopen("candidate.txt","r"))==NULL)
        {
            printf(" ! The File is Empty...\n\n");
        }
    char ch;
    for(i=0;i<10;i++)
    {
     do
     {
        fscanf(fp,"%s %d %s",person[i].name,&person[i].age,person[i].sex);
        while((ch=fgetc(fp))!='\n')
        {
         if(isdigit(ch)!=0 || isspace(ch)!=0)
           {
            if(fscanf(fp,"%d",&person[i].age)==ch)
            {
              for(j=i+1;j<10;j++)
               a[i]=ch;
               if(a[i]<a[j])
               {
                   temp=i;
               }
             //printf("%d",c);
           }
           }
        }
     }while((fgetc(fp))!=EOF);
      /*for(i=0;i<10;i++)
        printf("%d ",person[i].age);*/
     }
    printf("Minimum age is:%d",temp);
}

2 Ответов

Рейтинг:
17

Kornfeld Eliyahu Peter

1. Прочитать файл в массив структур: Чтение файла в массив структур - пример C[^]
2. Сортировка массива: qsort, qsort_s - cppreference.com[^]
3. Выберите первый пункт...


Member 13887243

Спасибо за вашу помощь.

Рейтинг:
11

CPallini

Вам не нужно собирать предметы (т. е. вам не нужен массив), вы находите минимального пожилого человека на лету:
(будьте осторожны, следующий код должен быть улучшен для обеспечения надежности)

#include <stdio.h>
#include <string.h>
#include <limits.h>

struct Person
{
  char name[40];
  int age;
  char sex[10];
};


int  main()
{

  struct Person current, youngest;

  youngest.age = INT_MAX;

  FILE *fp;

  int rc = -1;

  fp = fopen("candidate.txt","r");

  if ( ! (fp =fopen("candidate.txt","r")))
  {
    printf("Unable to open the input file...\n\n");
    return -1;
  }

  for(;;)
  {
    int rc = fscanf(fp,"%s %d %s", current.name, ¤t.age, current.sex);
    if ( rc != 3 ) break;
    if ( youngest.age > current.age )
    {
      youngest.age = current.age;
      strcpy(youngest.name, current.name);
      strcpy(youngest.sex, current.sex);
    }
  }

  if ( youngest.age != INT_MAX)
  {
    printf("%s is the yougest whose age is %d\n", youngest.name, youngest.age);
    rc = 0;
  }
  else
  {
    printf("Unable to retrieve data from the file\n");
  }
  fclose(fp);
  return rc;
}


Member 13887243

Я понял.Спасибо.