[英]Beginner writing C code to program a round of yahtzee, function to hold dice values?
我剛開始學習 C 代碼,我的作業有一些問題。 我需要一個 function 來保存骰子值。 我已經為它編寫了代碼,但是一旦我嘗試將它放入一個函數(keepArray)中,它似乎對我不起作用。 這是我到目前為止所擁有的。 如果沒有 function,它似乎可以工作。 當我將它放入 function 時,沒有保存任何值。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const int NUM_ELEMENTS = 4;
int diceArray[NUM_ELEMENTS];
int keepArray[NUM_ELEMENTS];
int i = 0;
for (i = 0; i <= NUM_ELEMENTS; i++) {
diceArray[i] = (rand() % 6) + 1;
printf("%d ", diceArray[i]);
}
printf("\n");
for (i = 0; i <= NUM_ELEMENTS; i++) {
scanf("%d", &keepArray[i]);
if (keepArray[i] == 1) {
keepArray[i] = diceArray[i];
}
if (keepArray[i] == 0) {
keepArray[i] = (rand() % 6) + 1;
}
}
for (i = 0; i <= NUM_ELEMENTS; i++) {
diceArray[i] = keepArray[i];
printf("%d ", diceArray[i]);
}
return 0;
}
所以我出於沮喪刪除了我的功能,但我一開始並沒有走得太遠。 這是我的功能可能是什么樣子的嘗試。 它主要是上述代碼的復制粘貼。
#include <stdio.h>
#include <stdlib.h>
const int NUM_ELEMENTS = 5;
int diceArray[NUM_ELEMENTS];
int keepArray[NUM_ELEMENTS];
int i = 0;
void
Roll(){
for (i = 0; i < NUM_ELEMENTS; i++)
{
diceArray[i] = (rand () % 6) + 1;
printf ("%d ", diceArray[i]);
}
}
Reroll(){
for (i = 0; i < NUM_ELEMENTS; i++)
{
scanf ("%d", &keepArray[i]);
if (keepArray[i] == 1)
{
keepArray[i] = diceArray[i];
}
if (keepArray[i] == 0)
{
keepArray[i] = (rand () % 6) + 1;
}
}
for (i = 0; i < NUM_ELEMENTS; i++)
{
diceArray[i] = keepArray[i];
printf ("%d ", diceArray[i]);
}
}
int main(void)
{
Roll();
Reroll();
}
我之前確實弄亂了我的函數,得到了某種 output,但我認為它仍然是基於不正確的代碼。 For the code now, I get and error "main.c:9:7: error: variably modified 'diceArray' at file scope int diceArray[NUM_ELEMENTS]; ^~~~~~~~~ main.c:13:7 :錯誤:在文件 scope int keepArray[NUM_ELEMENTS] 中可變地修改了“keepArray”;^~~~~~~~~~ main.c:40:1:警告:返回類型默認為“int”[-Wimplicit-int] Reroll (){ ^~~~~~"
const int NUM_ELEMENTS = 5;
不能用於 C 中的靜態尺寸 arrays。 當將其用作數組大小時,它會嘗試創建“可變長度數組”(文件 scope 中不允許,因為錯誤告訴您)。
您可以通過將其設為“真實”常量來解決此問題,例如:
#define NUM_ELEMENTS 5;
int diceArray[NUM_ELEMENTS];
int keepArray[NUM_ELEMENTS];
或者,
enum { NUM_ELEMENTS = 5 };
int diceArray[NUM_ELEMENTS];
int keepArray[NUM_ELEMENTS];
你也忘了為你的 Reroll Reroll
添加一個返回類型,它應該是void Reroll(void)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.