C 为什么程序每次都给出相同的输出?
该程序以结构的形式输入员工的各种数据。然后程序应向用户询问当前日期。如果两个年份之间的差异超过3年,程序应打印该员工的详细信息。我为同样的问题编写了以下代码。以字符串的形式输入日期,然后将年份字符转换为相应的整数。请在相应的代码中查找错误。程序的运行时间如下所示 运行时-C 为什么程序每次都给出相同的输出?,c,structure,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
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;
}
除空终止外,最多可容纳9个字符。但是您正在输入10个字符,没有\0个字符的空间
因此,printf将继续打印,直到找到\0并调用未定义的行为
将大小更改为
char date[11];
及
linkfloat的意图是什么?@Bathsheba将浮点格式链接起来,以避免该错误。但是a和b都是自动变量;该函数是不可操作的。您有一些内存错误。您的日期字符串有10个字符加上一个终止的空字符,因此至少需要11个字符,但您只为10个字符分配了空间。我在代码中没有看到任何检查来捕获不合适的字符串。首先解决这个问题。浮点格式的链接应该是什么意思?格式是如何链接的?
02/09/1998
char date[11];
char cdate[11];