【问题标题】:"lvalue required as left operand of assignment"“需要左值作为赋值的左操作数”
【发布时间】:2015-03-24 05:23:58
【问题描述】:

查看了涉及相同错误的其他问题,但不太明白为什么会出现错误。

我正在尝试将方程分配给同名函数中的变量?

我是新手,所以如果有人能向我解释为什么会发生这种情况,那就太棒了。

从底部数第五行是我得到错误的地方

#define DAYS_PER_WEEK 7

#define THURSDAY 0
#define FRIDAY   1
#define SATURDAY 2
#define SUNDAY   3
#define MONDAY   4
#define TUESDAY  5
#define WEDNESDAY 6

#define TRUE 1
#define FALSE 0
#define DAYS_PER_WEEK 7

int dayOfWeek (int doomsday, int leapYear, int month, int day);

int main (int argc, char *argv[]) {

   dayOfWeek(SUNDAY, FALSE, 1, 10);

   return EXIT_SUCCESS;
}

int dayOfWeek (int doomsday, int leapYear, int month, int day) {
   if (month == 1) {
      int doomsDate = 4;
      dayOfWeek = (day + doomsDate)/DAYS_PER_WEEK);
      printf ("The day of the week is: =%d\n",dayOfWeek);
   }
   return dayOfWeek;
 }

所以在@Gopi 解释了为什么我把函数改成这个之后

int dayOfWeek (int doomsday, int leapYear, int month, int day) {
   if (month == 1) {
      int doomsDate = 4;
      int dayNum = (day + doomsDate)/DAYS_PER_WEEK;
      printf ("The day of the week is: =%d\n",dayNum);
   }
   return dayOfWeek;
}

我需要满足以下断言:

assert (dayOfWeek (SUNDAY, FALSE, 1, 10) == SATURDAY); 

我该怎么做...

【问题讨论】:

  • 你为什么不直接return dayNum;
  • 虽然有(或曾经有)语言允许您将函数的结果分配给与函数同名的变量(Pascal 和 Fortran 77、IIRC),但 C 不是一种语言这允许。如果你打算这样做(请不要这样做),你必须声明一个与函数同名的局部变量。例如,这个(有点令我惊讶)在极其严格的编译选项下编译:int x(int y); int x(int y) { int x = y + 2; return x; } is clean with gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Werror -pedantic -c x.c

标签: c lvalue


【解决方案1】:
dayOfWeek = (day + doomsDate)/DAYS_PER_WEEK);

dayOfWeek 是一个函数名,所以它不能是一个可赋值的左值。

我正在尝试将方程分配给函数中的变量 同名?

函数dayOfWeek()中没有变量dayOfWeek

【讨论】:

  • @OnlyHughman 请注意变量和函数名之间的区别。从函数 dayOfWeek() 您可以使用 return dayNum; 返回值 您的代码在 return dayOfWeek; 之前看起来还不错,这没有意义,因为正如已经说过的没有变量 dayOfWeek .. 我说的是您删除代码的先前评论就在那儿
【解决方案2】:

编辑前:

请不要假设在函数内部会自动定义任何变量。它必须在参数(列表)或函数体中定义。

另外,函数名称不是变量。这不是左值

P.S - 不考虑全局变量


编辑后:

我希望它返回 dayOfWeek 并且我希望它与 dayNum 相同...我该怎么做?

在编辑后的代码中,return dayOfWeek; 无效,因为没有名为 dayOfWeek; 的变量。你需要(也必须)写

 return dayNum;

【讨论】:

    猜你喜欢
    • 2011-09-03
    • 2018-10-19
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多