2014-02-28 33 views
0

我在这里遇到问题。当我尝试在循环外访问t1[val]时,我得到一个垃圾值。循环值不在C++循环外部更新

int P[ ]={3,7,6,5,2,4,1,8}; 
int N[ ]={8,6,7,2,5,3,4,1}; 
int r= (sizeof(P)/sizeof(*P)); 
int s= (sizeof(N)/sizeof(*N)); 
int val=r/2 ; 
int t1[val],t2[val],t3[val],t4[val],n=0,p=0; 

for(int m=0;m< val;m++){ 
    t1[n]=P[m]; 
    t2[n]=N[m]; 
    n++; 
} 

cout << t1[val]; 

回答

0

检查你的循环,它仅限于< VAL这意味着数组值从被写入VAL-1,这就是为什么当你试图在t1 [val]上打印数值时,它给出了垃圾值,我不知道你想要做什么,但以下面的方式改变你的循环将解决你的目的

for(int m=0;m<=val;m++) 

即使上面的代码适合你,这是错误的做法,因为它会写入超出数组边界的值,甚至C++编译器也不会引发任何异常。

因此建议使用下面的语句来打印数组的最后一个元素

cout<<t1[val-1] 
+1

_m = 0; m <= val_用这个写出界限 –

+0

是的,我理解,但正如你在C/C++没有边界检查。我写了答案让他明白自己在犯什么错误,并相应地更新我的答案 – prince

2
cout<<t1[val]; 

试图访问元素val+1(数组索引范围从0val-1

如果需要输出的所有瓦尔斯for循环在它运行。

for (int i=0; i< val; i++) 
    cout<<t1[i]; 
+0

不,'T1 [VAL]'访问'元素val',不'VAL + 1'。 –

+0

我的意思是,如果元素是10,那么t [val]会尝试第11个元素.. –

5

阵列索引从0开始,因此int t1[val]较高有效索引是val-1,不val

而且,你只能分配值,直到val-1

for(int m=0;m<val;m++) 
//  ^runs only while m<val, e.g. until (inclusive) m==val-1