c - 如何使用输入字母在屏幕上打印姓名以该字母开头的员工名单及其对应信息

标签 c file structure

问题由 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); 
        }
    }
}

当我运行这段代码时,它只打印出前两个打印函数,甚至不允许我输入一个字母。

最佳答案

你说你想从 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
            ); 
        }
    }
}

关于c - 如何使用输入字母在屏幕上打印姓名以该字母开头的员工名单及其对应信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55846977/

相关文章:

objective-c - C char * 转换为 Objective-C NSString (或 NSData?)

java - 从数组中读取和检查值

c# - 文件已存在时的 File.Copy() 性能

c - 如何将结构从 Matlab 代码转换为 C 代码(使用 Matlab 编译器)

c - 读取文件时如何忽略c中的非字母字符

c - 用于识别 ANSI C 中损坏的自动生成接口(interface)层的静态断言

c - OpenCV - 如果 slider 在播放时更新其位置,视频播放速度会很慢

java - 类型转换是一项昂贵的操作吗?

c - 在 C 中传递结构的一部分

android - 澄清函数调用