![](/img/trans.png)
[英]I don't know why but the 2nd for loop for printing the id's is not working properly and a sometimes if I give length 9 to 3rd employee program exits
[英]why the program is not printing the 2nd employee's name?
该程序告诉哪个员工的任期等于 3 年或超过 3 年。 那么为什么程序不打印第二名员工的姓名呢?
代码
#include <stdio.h>
#include <string.h>
int main()
{
struct employee
{
char name[30]; //name of employee
int emp_code; // employee code
int date[10]; // year of joining
} e,e3;
struct employee e1 = {"Mr.ABCDEF", 123, 2002};
struct employee e2 = {"Mr.UVWXYZ", 456, 2004};
printf ("Enter current date DD MM YYYY: ");
scanf ("%d %d %d" , &e3.date, &e3.date ,&e.date);
if ((e.date - e1.date) >= 3)
printf("Employee Code: %d Name: %s\n", e1.emp_code , e1.name);
else if ((e.date - e2.date) >= 3)
printf("Employee Code: %d Name: %s\n", e2.emp_code , e2.name);
return 0; }
从 -'else if' 语句中删除 'else'。
即两个语句都应该在打印前测试长度。
if ((e.date - e1.date) >= 3)
printf("Employee Code: %d Name: %s\n", e1.emp_code , e1.name);
if ((e.date - e2.date) >= 3)
printf("Employee Code: %d Name: %s\n", e2.emp_code , e2.name);
尽管这些语句在逻辑和语法上都很好,但通过使用大括号使您的意图明确,可提高可维护性......
if ((e.date - e1.date) >= 3)
{
printf("Employee Code: %d Name: %s\n", e1.emp_code , e1.name);
}
if ((e.date - e2.date) >= 3;
{
printf("Employee Code: %d Name: %s\n", e2.emp_code , e2.name);
}
打印第二个用户位于 Else if 块中。 因此,如果您打印第一个,则将跳过 else if。
把 else if 变成 if 应该会更好。
在scanf ("%d %d %d", &e3.date, &e3.date, &e.date);
您将三个整数读入同一 memory 位置。 也许你的意思是scanf("%d %d %d", &e3.date[0], &e3.date[1], &e3.date[2]);
所以年月日 go 在日期数组的后续条目中。
在使用默认命令行 arguments 的 gcc 和 clang 下,编译器警告这是错误的:
$ clang d.c
d.c:16:22: warning: format specifies type 'int *' but the argument has type 'int (*)[10]' [-Wformat]
scanf ("%d %d %d" , &e3.date, &e3.date ,&e.date);
~~ ^~~~~~~~
d.c:16:32: warning: format specifies type 'int *' but the argument has type 'int (*)[10]' [-Wformat]
scanf ("%d %d %d" , &e3.date, &e3.date ,&e.date);
~~ ^~~~~~~~
d.c:16:42: warning: format specifies type 'int *' but the argument has type 'int (*)[10]' [-Wformat]
scanf ("%d %d %d" , &e3.date, &e3.date ,&e.date);
~~ ^~~~~~~
因为您明确地向计算机仅打印其中一个,而是使用else
命令。
但是,您的代码存在更大的问题,您应该收到多个警告但可能会被忽略:
您错误地使用了date
字段!
它被定义为整数数组,但您试图将其用作单个 integer。
您的条件将始终正确,因为您真正比较的是两个 arrays 的两个 memory 地址,每个地址的大小均为sizeof(int) * 10
。
您真的应该从日期字段中删除[10]
以使您的代码按照您的预期工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.