2 love honeies1 love_honeies1 于 2016.02.02 15:16 提问

error C2105: '++' needs l-value

#include "stdio.h"

void main()
{
FILE* fp;

int n[100];

int t=0;

if((fp=fopen("test.txt","r"))==NULL)

{

printf("失败\n");
}

while(!feof(fp))

{
fscanf(fp,"%d",&n++);
}

fclose(fp);
}

2个回答

caozhy
caozhy   Ds   Rxr 2016.02.02 15:27
已采纳

int i = 0;
while(!feof(fp))
fscanf(fp,"%d",&n[i++]);

91program
91program   Ds   Rxr 2016.02.02 15:29

优先级与运算顺序的问题, & 和 ++ 优先级相同,但右侧先运算。n 为数组名,不能执行自 ++ 或者 -- 的操作,因为它是常量指针。

2级优先级 右结合
! 逻辑非运算符
~ 按位取反运算符
++ 前缀增量运算符
-- 前缀增量运算符

  • 正号运算符
  • 负号运算符 (类型) 类型转换运算符
  • 指针运算符 & 地址与运算符 sizeof 长度运算符
91program
91program 建议你在不清楚优先级与结合顺序时,使用括号() 来达到想要的结果。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
error C2105: '++' needs l-value 数组名自增时遇到
如下, k 是变量, 它存得是地址, 变量可以作为左值,可以自增。               b是数组名,  数组名是地址, 但此时是作为常量,不可作为左值,不可以自增; 数组名是地址 它不是变量 数组才是变量   int b[]={10,20,30,40,50};  int i, *k;  k=&b[4]-4;  for (i=0; i  {   cout //依次输出每一
C++使用数组时,error C2105 “++需要左值”问题处置
在VS2015基于控制台的程序中,定义一个int数组类型ptr,该数组中包含了4个元素。接下来将数组的第2个元素值加123,如下代码 int ptr[] = { 6, 7, 8, 9 }; *(++ptr) += 123; 编译时会报error C2105 “++需要左值”的错误。
error C2166: l-value specifies const object 转
转自 http://www.pconline.com.cn/pcedu/empolder/gj/c/0412/514980.html感谢作者。 关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员  我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,  对像的状态也会随之发生变化!   如果一个类的成员函数被声明为cons
error C2102: '&' requires l-value
我自己找的答案,其实是说BTNode *p = &FindNodeByTE(B->lchild,x);&FindNodeByTE(B->lchild,x);没有固定的空间来存他,所以不给赋值。http://topic.csdn.net/t/20050419/09/3947945.htmlhttp://topic.csdn.net/u/20071127/11/3a729150-d1c
C/C++ 之 left operand must be l-value 错误提示总结
编译器:vc6.0 语言:c/c++ = : left operand must be l-value 到底是什么错误? 解释:赋值号(‘=’)左边的操作数必须是一个左值。通俗的说:左值就是可以改变的值的变量。 发生这个错误的原因是你把常量(或不可改变值的变量)放到了赋值号的左边。 例如:int a[3];            a++;//这里就相当于a=a+1;注意
error C2166: l-value specifies const object
<br />关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员<br />  我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,<br />  对像的状态也会随之发生变化! <br />  如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是<br />  该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员<br />  进行赋值.这个时候就需要用到mutable关键字了<br />  例如:
l-value specifies const object
<br />  <br />在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的。这个特性被用来保证某些成员函数在实现过程中,避免由于程序员大意而对数据进行了错误的修改;同时也说明此成员函数是非修改性的。如只需要返回成员变量的成员函数就被声明为const类型(const的位置在函数定义参数列表之后)<br />      推广开来,在const成员函数中也不能够调用非const的成员函数。这是因为非const成员函数可能会改变成员变量的值,这与const成员函数的定义相违背。<
left operand must be l-value 错误提示总结
编译器:vc6.0语言:c/c++= : left operand must be l-value 到底是什么错误?解释:赋值号(‘=’)左边的操作数必须是一个左值。通俗的说:左值就是可以改变的值的变量。发生这个错误的原因是你把常量(或不可改变值的变量)放到了赋值号的左边。例如:int a[3];           a++;//这里就相当于a=a+1;注意a是数组a[3]的首地址,在声明a[3]后,将开辟一段连续内存空间。                 //就是这段连续内存空间的首地址,是一个常量。所以
mongodb删除数据 报 E QUERY Error: remove needs a query 的错误
 删除mongodb集合中的数据可以使用remove()函数。remove()函数可以接受一个查询文档作为可选参数来有选择性的删除符合条件的文档。 remove()函数不会删除集合本身,同时,原有的索引也同样不会被删除。 删除文档是永久性的,不能撤销,也不能恢复的。因此,在执行remove()函数前先用find()命令来查看下是否正确,是个比较好的习惯啦。 2. 删除所有数据
remove needs a query at src/mongo/shell/collection.js:299
目的:删除test1