问题由 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/