Как использовать вводимое письмо для вывода на экран списка сотрудников, чье имя начинается с этой буквы, и их соответствующей информации - PullRequest
1 голос
/ 25 апреля 2019

Задача состоит из 2 структур массива, и каждая задача разбита на функции.Мне нужна помощь с функцией, которая будет запрашивать у пользователя письмо и выводить на экран список сотрудников, чье имя начинается с этой буквы.

Это файлы.employee.txt

Jimmy OBrien 1234567D Irish 40 1 2
David Keogh 3234567F Irish 61 0 0
David Hanahoe 5234567G Irish 48 1 2
Tom Byrne 6234567N Irish 62 1 4
Thomas Collins 8234567B Irish 35 0 0
Aoife Murphy 4234567F Irish 63 1 3
Joan OBrien 5234567M Irish 36 1 1
Maria Ionescu 7734567E Romanian 43 1 2
Celine Keogh 2254893R Irish 38 1 0

benefits.txt

1234567D 37500 20 10 0
3234567F 40000 20 10 0
5234567G 42000 20 10 0
6234567N 45000 20 10 0
8234567B 47000 20 10 0
4234567F 50000 20 10 0
5234567M 55000 20 10 0
7734567E 60000 20 10 0
5234997P 75000 20 10 0
2254893R 75000 20 10 0
void input_letter()
{
    char letter[1]; 
    int i; 

    printf("Please enter a letter of a employee. \n "); 
    scanf("%c", letter); 

    printf("\nNAME\tSURNAME\tPPS\tSALARY\tPENSION\tALLOWANCE\n");

    for(i = 0; i < no_emplo; ++i)
    {
        if(strcmp(emplo[i].name, letter) == 0) {
            printf("\n%s\t%s\t%s\t%d\t%d\t%d\n",
            emplo[i].name, 
            emplo[i].surname, 
            emplo[i].PPS, 
            bene[i].salary, 
            bene[i].pension, 
            bene[i].allowance); 
        }
    }
}

Когда я запускаю этот код, он печатает только первые 2 функции печати и даже не позволяет мневведите письмо.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Пожалуйста, примите во внимание эти изменения:

void input_letter()
{
        char letter;
        int i; 

        printf("Please enter a letter of a employee. \n "); 
        scanf("%c", & letter); 

        printf("\nNAME\tSURNAME\tPPS\tSALARY\tPENSION\tALLOWANCE\n");

        //Prints the table 
        for(i=0; i<no_emplo; i++)
        {
                if(emplo[i].name[0] == letter) {
                        printf("\n%s\t%s\t%s\t%d\t%d\t%d\n",
                                        emplo[i].name, 
                                        emplo[i].surname, 
                                        emplo[i].PPS, 
                                        bene[i].salary, 
                                        bene[i].pension, 
                                        bene[i].allowance); 
                }
        }
}
0 голосов
/ 25 апреля 2019

Вы сказали, что хотите прочитать одно письмо от stdin. Но ваша переменная letter является массивом размера 1. Недостаточно долго хранить строку длиной 1 и завершающего '\0', поэтому ее нельзя использовать с %c спецификатор формата.

Почему бы вам просто не использовать char?

void input_letter(void)
{
    puts("Please enter a letter of a employee."); 

    char letter;
    if (scanf(" %c", &letter) != 1) {
        fputs("Input error!\n\n", stderr);
        return;
    }

    puts("\nNAME\tSURNAME\tPPS\tSALARY\tPENSION\tALLOWANCE");

    for(size_t i = 0; i < no_emplo; ++i)
    {
        if(emplo[i].name[0] == letter) {
            printf("\n%s\t%s\t%s\t%d\t%d\t%d\n",
                   emplo[i].name,
                   emplo[i].surname, 
                   emplo[i].PPS, 
                   bene[i].salary, 
                   bene[i].pension, 
                   bene[i].allowance
            ); 
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...