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

标签 c

<分区>

我正在做第一年的工程学。 我是编程初学者。 我的程序出现错误 - LValue required 行 - 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();
}

最佳答案

看起来您想为这些行中的排列制作字符串副本

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);

关于c - 需要 LValue - 我的第一个程序的原因和解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219612/

相关文章:

c - 打开并编辑 C 中具有变量名称的外部文件

在 C 中将 30 个整数集中为一个 64 位整数

c - 在 C 语言的计算器程序中,输出以倒置的问号形式出现,并且提示出现两次

c - 唯一元素 - 结构数组

c - 使用标记为 volatile 的变量,而不是 protected 互斥锁

c++ - `fseek`、 `lseek`、 `seekg`、 `seekp` 之间有什么区别?

c - 尝试计算 C 中的单词时 EOF 没有终止

c - 在c程序中用%20替换空格

c++ - 双插槽与单插槽内存模型?

C/C++——位域作为 bool 值?