报错:lvalue required as unary ‘&’ operand 调试求助
解决编译错误:lvalue required as unary ‘&’ operand
错误原因
scanf的第二个参数要求传入变量的地址(左值,即可以被赋值的内存对象),而你写的&prompt_for_parking()是对函数调用的返回值取地址——函数返回的是临时double值,不属于左值,无法被取地址,因此编译器报错。
正确实现方式
根据你的需求(获取用户输入的double值并存储),有两种合理的修正方案:
方案1:让prompt_for_parking函数负责输入逻辑
既然函数原型是double prompt_for_parking(void),可以把输入逻辑封装在函数内部,返回用户输入的值:
double prompt_for_parking(void) { double parking_input; // 注意去掉格式字符串里的\n,否则会导致程序等待额外输入 scanf("%lf", &parking_input); return parking_input; }
在主逻辑中调用函数并接收返回值:
double parking_val = prompt_for_parking(); // 后续用parking_val进行相关处理
方案2:直接在主逻辑中处理输入
如果不需要通过prompt_for_parking封装输入,直接定义变量存储输入值:
double parking_val; scanf("%lf", &parking_val); // 若需要将值传入prompt_for_parking处理,可修改函数原型为void prompt_for_parking(double*),然后调用: // prompt_for_parking(&parking_val);
额外注意事项
- 不要在
scanf的格式字符串中加\n:scanf会自动忽略输入中的空白字符(回车、空格等),添加\n会导致程序需要用户输入额外的空白才会继续执行。
内容的提问来源于stack exchange,提问作者Sheila Li
相关产品推荐
相关产品推荐

