2016-12-04 69 views
-2

我的代碼應該生成5個數組。2個不同的代碼行在第一時間不工作,然後工作

  • 第一和用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; 
} 

我感到茫然:爲什麼這段代碼有一段時間工作不好,並且下一次什麼都好。

+3

做一些關於代碼的格式。 C中的數組也從零開始索引 –

+3

這看起來很糟糕。另外它是'int main(void){return 0; }'或'int main(int argc,char * argv []){return 0; }'在C中。 – pzaenger

+0

C中的序列是0的原點。 – BLUEPIXY

回答

0

有你的代碼中的多個問題:

  • 指數值是基於C語言的有效指標值的20個元素的數組0是0〜19你的循環應該寫成:

    for (i = 0; i < 20; i++) 
        a[i] = rand() % s; 
    
  • init調用應爲:

    init(x, y, vx, vy, m); 
    
  • 您不應該在全局範圍內定義變量,在main函數的主體中將它們設置爲局部變量,並且也可以在init函數的主體中定義i

  • =-不是運營商,該語句c[i] =- 20 + rand() % 40;被解析爲c[i] = -20 + (rand() % 40);這可能是您的意圖,但您的演示文稿具有誤導性。使用這個來代替:

    c[i] = -20 + rand() % 40; 
    
  • }for報表的主體結束後的;是無用的,應予刪除。

正如目前所寫,代碼會在很多地方調用未定義的行爲,這意味着會發生任何事情。