需要LValue - 我的第一个程序的原因和解决方案

时间:2013-11-26 14:20:54

标签: c

我正在做第一年的工程学。 我是编程初学者。 我有程序,我收到错误 - 需要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();
}

2 个答案:

答案 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),请使用strcpystrncpy。对于其他数组类型,请使用memcpy

所以,这些行应该是

strcpy( w, a[i].empname );
strcpy( a[i].empname, a[k].empname );
strcpy( a[k].empname, a[i].empname );