c - 如何使用输入字母在屏幕上打印姓名以该字母开头的员工列表及其对应信息
问题描述
该问题由 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 个打印函数,甚至不允许我输入字母。
解决方案
你说你想读一封来自标准输入的信。但是您的变量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
);
}
}
}
推荐阅读
- php - 将值的总和添加到 PHP 中第二个数组中每个匹配 ID 的第一个数组
- java - Android 媒体播放器:如何从分离的文件中播放视频
- javascript - 如何从基于对象数组的对象数组中返回值的总和
- python - 合并2个excel工作簿
- sql-server - 为什么在我导入的数据集中“£”更改为“£”
- git - 触发/执行另一个 repo 作业(只需要触发特定的作业)
- java - JHIPSTER 无访问权限管理日志和指标
- c# - 如何从 C# 调用 C++ 代码?当 C# 代码嵌入到本机 C++ 应用程序中时
- angular - 为什么角度路由器在启动时获取延迟加载的模块?
- python - Python - 将字符串转换为对象或数组