求助,c语言中如何使一个变量在某次赋值后保持不变

rt,在c语言环境下如何使一个变量在某次赋值后无法再修改其值,而且这个变量还是二维数组中的元素。
我在vs2010编程的时候,老是一些变量的值莫名其妙就变化了,根本没改动过也变了。用const定义一个常量保存之后就解决了,但数组的元素无法定义为const啊,而且是部分元素要保持不变,不是全部,怎么办啊?
高手请看这个:
for (i=stax;i<=endex;i++)
for (j=0;j<=n;j++)
{
printf_s("\n please input G[ %d ][ %d ]= ",i,j );
scanf_s("%f",&G[i][j]);
printf_s("\n please input B[ %d ][ %d ]= ",i,j );
scanf_s("%f",&B[i][j]);
};
简单的循环,如果stax与endex为变量,循环后结束值变得乱七八糟,但用const定义为常量则问题解决,为神马?

变量,如果你之后不重新赋值就不会改变的

如果你要保留某个值,你可以用临时变量保存,例如
int tmp=a[i];追问

高手请看这个:
for (i=stax;i<=endex;i++)
for (j=0;j<=n;j++)
{
printf_s("\n please input G[ %d ][ %d ]= ",i,j );
scanf_s("%f",&G[i][j]);
printf_s("\n please input B[ %d ][ %d ]= ",i,j );
scanf_s("%f",&B[i][j]);
};
简单的循环,单但果stax与endex为变量,循环后结束值变得乱七八糟,但用const定义为常量则问题解决,为神马?

追答

for循环是一个已知次数的循环,你这个stax和endex是在哪里赋值的?

你可以试试这么写

int stax=0;
int endex=10;
int n=10;
for (i=stax;i<=endex;i++)
for (j=0;j<=n;j++)
{
printf_s("\n please input G[ %d ][ %d ]= ",i,j );
scanf_s("%f",&G[i][j]);
printf_s("\n please input B[ %d ][ %d ]= ",i,j );
scanf_s("%f",&B[i][j]);
};

追问

就是这样写不行,stax和endex定义为常量才行。虽然循环次数相同,可是定义为变量的话stax和endex循环结束时会改变

追答

会改变????
你单步看看是哪一步发生改变了?

另外for循环常规用法其实是这样

for (i=0;i<=10;i++)
for (j=0;j<=10;j++)
{
printf_s("\n please input G[ %d ][ %d ]= ",i,j );
scanf_s("%f",&G[i][j]);
printf_s("\n please input B[ %d ][ %d ]= ",i,j );
scanf_s("%f",&B[i][j]);
};

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-07
如果这个不变量你不经常用可以设置为全局变量 放在程序的最上部追问

全局变量也不能把值固定下来吧

追答

const定义为常量 之后 stax与endex 就是常量了

第2个回答  2013-05-07
定义为全局变量,部分保持不变?,这个类型的话就不行了,你可以试试类定义,在类里分为两个不同部分追问

不是,是用scanf读入后想把数组的值固定下来。但并非所有元素,某些元素还要计算后修正,某些可以直接固定下来。譬如定义一个啊int a[10],想把啊a[0]-a[5]的值不变当作常量,a[6]-a[10]用来计算。而且事先不知道哪个元素会被输数据时定为不变啊。

相似回答