繁体   English   中英

为什么程序不打印第二名员工的姓名?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM