gpt4 book ai didi

c - 将随机值放入数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:50 27 4
gpt4 key购买 nike

我是编码和调试新手。作为一项任务,我正在尝试为两个玩家制作一个 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;
}

最佳答案

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

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);

关于c - 将随机值放入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53244216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com