为什么程序每次都给出相同的输出?

时间:2019-06-24 07:03:55

标签: c structure

该程序将以结构形式获取有关员工的各种数据。然后,程序应向用户询问当前日期。如果年份之间的差异超过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;
}

1 个答案:

答案 0 :(得分:3)

char date[10];

最多可容纳9个字符,但不包括null终止符。但是您输入的是10个字符,\0个字符没有空格。

02/09/1998

因此,您的printf继续打印,直到找到\0并调用未定义的行为。

将大小更改为。

char date[11];

char cdate[11];