我正在做第一年的工程学。 我是编程初学者。 我有程序,我收到错误 - 需要LValue - 30,31和32(在下面的代码中标记)。
错误的原因是什么?
#include<stdio.h>
#include<conio.h>
struct employee
{
char empname[30];
int leave;
};
main()
{
struct employee a[1000];
int bp=5000,salary,x,i,j,k;
char w[30];
int t;
x=(bp*120)/100;
salary=bp+x;
printf("Enter the number of employees:");
scanf("%d",&j);
for(i=0;i<j;i++)
{
printf("Enter employee name and number of days he/she took leave:");
scanf("%s%d",&a[i].empname, &a[i].leave);
}
for(i=0;i<j;i++)
{
for(k=i+1;k<j;k++)
{
if(a[i].empname[0]>a[k].empname[0])
{
w= a[i].empname; // Line 30
a[i].empname=a[k].empname; // Line 31
a[k].empname=w; // Line 32
t=a[i].leave;
a[i].leave=a[k].leave;
a[k].leave=t;
}
}
}
for(i=0;i<j;j++)
{
if(a[i].leave>10)
salary=salary-((a[i].leave-10)*366);
}
for(i=0;i<j;i++)
{
printf("Employee name = %s\nNumber of days leave = %d\nSalary = %d\n",a[i].empname,a[i].leave,salary);
}
getch();
}
答案 0 :(得分:2)
看起来你想在这些行中进行排列的字符串复制
w= a[i].empname;
a[i].empname=a[k].empname;
a[k].empname=w;
你不能在C
中以这种方式进行字符串复制您必须使用strcpy()
代替
char * strcpy ( char * destination, const char * source );
所以你可以用这种方式进行排列
strcpy(w, a[i].empname);
strcpy(a[i].empname, a[k].empname);
strcpy(a[k].empname, w);
答案 1 :(得分:1)
除非它是sizeof
或一元&
运算符的操作数,或者是用于在声明中初始化另一个数组的字符串文字,否则表达式为“N-element array of T
“将被转换(”衰减“)为”指向T
的指针“类型的表达式,其值将是数组中第一个元素的地址。此转换后的表达式不是 lvalue ,这意味着它可能不是作业的目标。
如果要将一个数组的内容复制到另一个数组,则需要使用库函数。对于C字符串(char
的数组,其终止值为0),请使用strcpy
或strncpy
。对于其他数组类型,请使用memcpy
。
所以,这些行应该是
strcpy( w, a[i].empname );
strcpy( a[i].empname, a[k].empname );
strcpy( a[k].empname, a[i].empname );