将随机值放在数组中

时间:2018-11-10 22:53:36

标签: c

我是编码和调试的新手。作为一项任务,我试图为两个玩家制作一个Nim游戏。但是,只要我在代码中达到了要点,就会给我分段错误。我认为问题可能是指向数组中的错误位置,但是更改这些值没有帮助。最终,我尝试使用gdb进行调试,并说在为数组分配随机数的那一行出现了段错误。我不知道该如何处理调试时得到的信息。这是我将1到6的随机数分配到数组中的部分:

for (int x; x < aantalrijen; x++) {
    if (geinitialiseerd == 0) {
        fiches[x] = rand()% 6 + 1 ;
        geinitialiseerd = 1;
    }
    printf("\n\tRij %d:\t", x+1);
        for (int y = 0; y < fiches[x]; y++) {
            printf(" @ ");
        }
    fichesum = fichesum + fiches[x];
}
}

令人惊讶的是,仅当我输入1或10作为aantalrijen时,我才得到细分错误,但当我在两者之间输入任何内容时,却没有得到细分错误。但是,该代码仍然无法正常工作;当我输入2到9之间的数字时,它仍然不能正常工作。这是我到目前为止编写的全部代码,即使尚未完成:

#include <stdio.h>
#include <stdlib.h>

//Initialiseren van speler namen, wiens beurt het is, de aantal rijen, 
de aantal fiches op ieder rij, het totaal aantal fiches en de variant 
die gespeeld wordt.
char speler1[10];
char speler2[10];
int geinitialiseerd;
int beurt;
int aantalrijen;
int fiches[10];
int fichesum;
int rijnemen;
int aantalnemen;
int variant;

int output () {

//For loop voor initialisatie van het spel. Hiermee wordt bedoelt dat x aantal rijen een random waarde krijgen tussen 1 en 6. Deze worden ook meteen geprint.
    for (int x; x < aantalrijen; x++) {
        if (geinitialiseerd == 0) {
            fiches[x] = rand()% 6 + 1 ;
            geinitialiseerd = 1;
        }
        printf("\n\tRij %d:\t", x+1);
            for (int y = 0; y < fiches[x]; y++) {
                printf(" @ ");
            }
        fichesum = fichesum + fiches[x];
    }
}

int main () {

//Introductie en vraag om namen
printf("==========================================================================================\n**Welkom bij Nim! Dit is een spel gemaakt door Michael Francis voor twee spelers!\t**\n==========================================================================================\n**Wat is de naam van speler 1?\t\t\t\t\t\t\t\t**\n");
scanf("%s", &speler1);
printf("**Wat is de naam van speler 2?\t\t\t\t\t\t\t\t**\n");
scanf("%s", &speler2);
printf("\n**Kies het aantal rijen waarmee u wilt spelen (tussen de 1 en 10):\t\t\t**\n==========================================================================================\n");
scanf("%d", &aantalrijen);
printf("==========================================================================================\n**Kies de variant die u wilt spelen:\t\t\t\t\t\t\t**\n\t1. Verliezer neemt laatste fiche\n\t2. Winnaar neemt laatste fiche\n==========================================================================================\n");
scanf("%d", &variant);
printf("==========================================================================================\n**Nieuw gegenereerd spel:\t\t\t\t\t\t\t\t**\n");
output();
printf("\n\n==========================================================================================\n");
fichesum = 100;
while (fichesum != 0) {

    //For-loop om huidige fiches uit te printen
    //for (int a; a < aantalrijen; a++) {
    //  printf("\n\tRij %d:\t", a+1);
    //  for (int b = 0; b < fiches[a]; b++) {
    //      printf(" @ ");
    //  }
    //}
    output();

    fichesum = 0;
    if (beurt == 0) {
        printf("\n\n==========================================================================================\n%s is aan de beurt!", speler1);
        beurt = 1;
    } else {
        printf("\n\n==========================================================================================\n%s is aan de beurt!", speler2);
        beurt = 0;
    }
    printf("\nUit welk rij wilt u fiches nemen?\n");
    scanf("%d", &rijnemen - 1);
    printf("\nHoeveel fiches wilt u nemen?\n");
    scanf("%d", &aantalnemen);
    fiches[rijnemen] = fiches[rijnemen] - aantalnemen;
    printf("%d", fiches[rijnemen]);

}

return 0;
}

1 个答案:

答案 0 :(得分:0)

如果使用-Wall -O2进行编译,则会在for中的output循环上收到警告:

dut.c: In function ‘output’:
dut.c:21:11: warning: ‘x’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  for (int x; x < aantalrijen; x++) {
           ^

更改:

for (int x; x < aantalrijen; x++) {

进入:

for (int x = 0; x < aantalrijen; x++) {

另一个要修复的警告

更改:

    scanf("%s", &speler1);
    scanf("%s", &speler2);

进入:

    scanf("%s", speler1);
    scanf("%s", speler2);