C 2行不同的代码don';第一次不工作,然后工作

C 2行不同的代码don';第一次不工作,然后工作,c,C,我的代码应该生成5个数组 第一个和第二个参数从0到窗口的最大分辨率(图形生成窗口(宽度、高度)) 第三个和第四个参数为-20到20 第五个参数等于球数+1的幂 但是,在VisualStudio 2k8和2k12上,第一个数组充满了0,第三个数组的值远远大于(-)20,第五个数组的偶数小于0 #include <stdio.h> #include <time.h> #include <stdlib.h> #include "winbgi2.h" int s

我的代码应该生成5个数组

  • 第一个和第二个参数从0到窗口的最大分辨率(图形生成窗口(宽度、高度))
  • 第三个和第四个参数为-20到20
  • 第五个参数等于球数+1的幂
但是,在VisualStudio 2k8和2k12上,第一个数组充满了0,第三个数组的值远远大于(-)20,第五个数组的偶数小于0

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "winbgi2.h"

int s, w;
int i;
int x[20], y[20], vx[20], vy[20], m[20]; 

void init(int a[20], int b[20], int c[20], int d[20], int e[20]);

void main() {
    srand((unsigned) time(NULL));

    int min;
    int max;
    min = 100;
    max = 1000;
    s = min + rand() % max;
    w = min + rand() % max;

    graphics(s, w);

    init(&x[20], &y[20], &vx[20], &vy[20], &m[20]);

    for (i = 1; i <= 20; i++) {
        printf("Array element x=%ld \t is equal to %ld\n", i, x[i]);
    };

    for (i = 1; i <= 20; i++) {
        printf("Array element y=%ld \t is equal to %ld\n", i, y[i]);
    };

    for (i = 1; i <= 20; i++) {
        printf("Array element vx=%ld \t is equal to %ld\n", i, vx[i]);
    };

    for (i = 1; i <= 20; i++) {
        printf("Array element vy=%ld \t is equal to %ld\n", i, vy[i]);
    };

    for (i = 1;i <= 20; i++) {
        printf("Mass of ball m=%ld \tis %ld\n", i, m[i]);
    };

    wait();
}

void init(int a[20], int b[20], int c[20], int d[20], int e[20]) {
    for (i = 1; i <= 20; i++)
        a[i] = rand() % s;

    for (i = 1; i <= 20; i++)
        b[i] = rand() % w;

    for (i = 1; i <= 20; i++)
        c[i] =- 20 + rand() % 40;

    for (i = 1; i <= 20; i++)
        d[i] =- 20 + rand() % 40;

    for (i = 1; i <= 20; i++)
        e[i] = i * i * 2 + 1;
}
#包括
#包括
#包括
#包括“winbgi2.h”
int s,w;
int i;
int x[20],y[20],vx[20],vy[20],m[20];
void init(int a[20]、int b[20]、int c[20]、int d[20]、int e[20]);
void main(){
srand((无符号)时间(NULL));
int-min;
int max;
最小值=100;
最大值=1000;
s=最小值+随机数()%max;
w=最小值+随机数()%max;
图形(s、w);
初始化(&x[20]、&y[20]、&vx[20]、&vy[20]、&m[20]);

对于(i=1;i,代码中存在多个问题:

  • 索引值是基于C的
    0
    。由20个元素组成的数组的有效索引值是0到19。循环应编写为:

    for (i = 0; i < 20; i++)
        a[i] = rand() % s;
    
  • 您不应该在全局范围内定义变量,而应该在
    main
    函数的主体中定义局部变量,并在
    init
    函数的主体中定义
    i

  • =-
    不是运算符,中的语句
    c[i]=-20+rand()%40;
    被解析为
    c[i]=-20+(rand()%40);
    ,这可能是您的意图,但您的演示具有误导性。请改为:

    c[i] = -20 + rand() % 40;
    
  • for
语句的
}
之后的
是无用的,应该删除


正如目前编写的那样,代码在许多地方调用未定义的行为,这意味着任何事情都可能发生。

对代码的格式做些什么。另外,C中的数组从零开始索引这看起来很糟糕。此外,它是
int main(void){return 0;}
int main(int argc,char*argv[]){return 0;}
在C中。顺序是C中的0 origin。您在调用
init
函数时传递了错误的内容。传递
&x[20]
会传递
x
数组之外的一个元素的地址,该数组不存在,因此会导致未定义的行为。您要做的只是
init(x,y,vx,vy,m)
。添加运算符
&
的地址和下标
[20]
会使其完全错误。您有很多。您的代码没有任何意义。您应该启用所有警告和调试信息,并使用调试器。
c[i] = -20 + rand() % 40;