该程序将以结构形式获取有关员工的各种数据。然后,程序应向用户询问当前日期。如果年份之间的差异超过3年,则程序应打印该员工的详细信息。我为相同的代码编写了以下代码。日期的输入采用字符串形式,然后将年字符转换为相应的整数。请在相应的代码中找到错误。该程序的运行时间如下。
运行时间-
For how many employees you want to enter the data for?
2
Enter the code, name and date of joining(Format is dd/mm/yyyy).
04 sukrit 02/09/1998
Enter the code, name and date of joining(Format is dd/mm/yyyy).
05 harish 02/05/2018
please enter the current date.(dd/mm/yyyy)
23/07/2019
4 sukrit 02/09/19985 harish 02/05/2018
程序-
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void linkfloat();
struct employee
{
int code; char name[10]; char date[10];
}n[20];
int main()
{
int x,i,dh,y1,y2,diff;
printf("For how many employees you want to enter the data for?\n");
scanf("%d",&x);
for(i=0;i<x;i++)
{
printf("Enter the code, name and date of joining(Format is dd/mm/yyyy).\n");
scanf("%d %s %s",&n[i].code,n[i].name,n[i].date);
while((dh=getchar())!='\n')
;
}
char cdate[10];
printf("please enter the current date.(dd/mm/yyyy)\n");
scanf("%s",cdate);
//converting character to integer
//date1
for(i=0;i<x;i++)
{
y1 = (n[i].date[6]-48)*1000+(n[i].date[7]-48)*100+(n[i].date[8]-48)*10+(n[i].date[9]-48);
y2 = (cdate[6]-48)*1000+(cdate[7]-48)*100+(cdate[8]-48)*10+(cdate[9]-48);
printf("%d %d\n",y1,y2);
diff = abs(y2-y1);
if(diff>=3)
{
printf("%d %s %s\n",n[i].code,n[i].name,n[i].date);
}
}
return 0;
}
void linkfloat()
{
float a=0,*n;
n = &a;
a = *n;
}
答案 0 :(得分:3)
char date[10];
最多可容纳9
个字符,但不包括null
终止符。但是您输入的是10
个字符,\0
个字符没有空格。
02/09/1998
因此,您的printf
继续打印,直到找到\0
并调用未定义的行为。
将大小更改为。
char date[11];
和
char cdate[11];