mil*_*nko -2 c arrays debugging
它应该是简单的,两个数组,一个有另外5个,有6个元素.
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=0;
int k=0;
int v[5] = {2,3,4,5,6};
int g[6];
for( i = 1; i <= 6; i++ ){
k= i + 1;
if ( 1 == i && 2 == i)
{
g[k]=v[i];
}
else
{
g[k]=(v[i]+10);
}
printf("%d\n",g[k]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我懂了
13
14
15
16
32776
10
Run Code Online (Sandbox Code Playgroud)
我真的很想要
2 3 13 14 15 16
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里?我应该创造功能还是什么?
数组索引从0开始,这意味着v[0]并且g[0]是数组的第一个元素.所有你i和你k的一个1.
1 == i && 2 == i从来都不是真的.如果1 == i,那么2 != i.如果2 == i,那么1 != i.
1 == i && 2 == i
Run Code Online (Sandbox Code Playgroud)
应该
1 == i || 2 == i
Run Code Online (Sandbox Code Playgroud)
你的循环有5次传球,但需要6次!
1) g[0] = v[0];
2) g[1] = v[1];
3) g[2] = v[1]+10;
4) g[3] = v[2]+10;
5) g[4] = v[3]+10;
6) g[5] = v[4]+10;
Run Code Online (Sandbox Code Playgroud)
#include <stdlib.h>
#include <stdio.h>
int main() {
int v[5] = {2,3,4,5,6};
int g[6];
for( int i = 0; i < sizeof(g)/sizeof(*g); ++i ) {
if ( 0 == i || 1 == i )
g[i] = v[i];
else
g[i] = v[i-1]+10;
printf("%d\n", g[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意
if ( 0 == i || 1 == i )
Run Code Online (Sandbox Code Playgroud)
可以简化为
if ( 2 < i )
Run Code Online (Sandbox Code Playgroud)
您的代码有一些问题:
if ( 1 == i && 2 == i)将始终返回,false因为变量不能同时为1和2.i变得5和6,v[i]并g[i]触发读取到超过相应阵列存储器范围,这解释了在输出的随机值的存储器位置.我想这就是你想要的:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i = 0;
int v[5] = {2, 3, 4, 5, 6};
int g[6];
for ( i = 0; i < 6; i++ )
{
if ( i < 2 )
{
g[i] = v[i];
}
else
{
g[i] = ( v[i - 1] + 10 );
}
printf ( "%d\n", g[i] );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
2 3 13 14 15 16
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |