@jillene

Как вывести элементы из файла с проверкой условия?

Подскажите, пожалуйста, есть структура ФИО, пол, возраст. Записи вводятся с клавиатуры. Необходимо сохранить эту информацию в файл, а потом вывести всех мужчин на экран и в отдельный файл.
Вот код для вывода из файла, но как добавить проверку не пойму...
#include "stdafx.h"
#include <cstdio>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *file;
    struct Person {
        char name[20]; 
        char gender[20]; 
        unsigned age; 
    };
    struct Person SinglePerson[10];
    char i=0;
 
    file = fopen("e:\\Test.txt", "r");
 
    while (fscanf (file, "%s%s%u", SinglePerson[i].name, &(SinglePerson[i].gender), &(SinglePerson[i].age)) != EOF) {
        printf("%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        i++;
    }
 
    file = fopen("e:\\fprintf.txt", "w");
 
    while (scanf ("%s%s%u", SinglePerson[i].name, &(SinglePerson[i].gender), &(SinglePerson[i].age)) != EOF) {
        fprintf(file, "%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        i++;
    }
    fread;
 
    return 0;
}
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Eddy_Em
Жуть-то какая! Если структура бинарная, то и читать надо куском:
int fd = open("/tmp/myfile", O_RDONLY);
...
if(read(&SinglePerson[i], sizeof(struct Person)) != sizeof(struct Person)){
  // ошибка
}
...

Аналогично с записью.
Ответ написан
Комментировать
@jillene Автор вопроса
Сделал!!!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define M 2 // M plus 1 is equals to number of structres
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
    FILE *file;
    struct Person {
        char name[20]; 
        char gender[20]; 
        unsigned age; 
    };
    struct Person SinglePerson[1];
    char i=0;
    char counter = 0;
 
void InputFromKeyboard () {
    file = fopen("Input.txt", "w");
    while(scanf("%s%s%u", SinglePerson[i].name, SinglePerson[i].gender, &(SinglePerson[i].age)) == 3 && i <= M) {
        fprintf(file, "%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        counter++;
        i++;
        if (i == M+1) {
            break;
        }
    }
    fclose(file);
};
 
void OutputToFile () {
    file = fopen("Output.txt", "w");
    for (i = 0; i < counter; i++) {
        if (strcmp(SinglePerson[i].gender, "Male") == 0) {
            fprintf(file, "%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        }
    }
    fclose(file);
}
 
void OutputToScreen () {
    file = fopen("Output.txt", "r");
    for (i = 0; i < counter; i++) {
        if (strcmp(SinglePerson[i].gender, "Male") == 0) {
            printf("%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        }
    }
    fclose(file);
}
 
int main(int argc, char *argv[]) {
    InputFromKeyboard();
    OutputToFile();
    OutputToScreen();
    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект
22 нояб. 2024, в 21:44
50000 руб./за проект