首页 > 解决方案 > 如何使用输入字母在屏幕上打印姓名以该字母开头的员工列表及其对应信息

问题描述

该问题由 2 个数组结构组成,每个任务都分解为函数。我需要有关向用户询问字母并在屏幕上打印姓名以该字母开头的员工列表的功能的帮助。

这些是文件。员工.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

福利.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 个打印函数,甚至不允许我输入字母。

标签: cfilestructure

解决方案


你说你想读一封来自标准输入的信。但是您的变量letter是一个大小为 1 的数组。它不足以存储长度为 1 的字符串终止符'\0',因此它不能与%c格式说明符一起使用。

你为什么不简单地使用 a 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
            ); 
        }
    }
}

推荐阅读