[英]Passing an array to a function then print that array in main function
編寫一個擲骰子游戲。 該游戲應允許用戶一次最多擲六個骰子。 每次擲骰子都會存儲在一個六元素數組 integer 中。 該數組將在 main() function 中創建,但傳遞給一個名為 tossDie() 的新 function。 tossDie() function 將負責生成從 1 到 6 的隨機數,並將它們分配給適當的數組元素編號。 擲骰子后,main() function 應該顯示骰子的生成值。
以上是我的問題。
我在 tossDie function 中使用了一個數組,但是當打印了 tossDie function 中的數組時。 該數組中的元素超過六個,我無法控制,元素不是 1 到 6 之間的隨機數。這是我的方法:
#include <iostream>
#include <time.h>
#include <stdlib.h>
int tossDie(int [], int);
int main() {
srand(time(0));
int a[6]= {'\0'};
int size = 6;
tossDie(a, size);
// printf("The dice results: \n%d", a);
}
int tossDie(int dice[6], int size){
srand(time(0));
int i =0;
for (i =0; i<=6 ; i++){
dice[i] = 1 + rand()%(6);
printf(" %d", dice);
}
return 0;
}
主要聲明:
您的代碼可能會受益於全面的評論,所以讓我們從主要聲明開始。 該標准明確指出:
它 [main] 應定義為返回類型 int 且不帶參數。
之間有區別
int main()
和
int main(void)
第一個占用任意數量的 arguments,第二個不占用。
神奇數字:
您在代碼中使用了幻數 6、5 次。 考慮改用定義預處理器:
#define MAX 6
它更容易更改和維護。 您不希望在十幾個地方而不是一個地方更改 6。
NULL 字節:
將 null 字節'\0'
替換為0
。
尺寸:
C 中確定數組大小的常用習慣用法是:
size_t size = sizeof (a) / sizeof (a[0]);
其中 sizeof(a) 是字節總數,sizeof(a[0]) 是一個元素的大小。
但是,當您已經將大小定義為 define 語句時,您不需要計算大小嗎?
隨機數生成器:
種子只能設置一次。 這個問題的答案srand() — 為什么只調用一次? 詳細解釋一下。
非法訪問 MEMORY
for (i = 0; i <= 6; i++)
您在數組邊界之外訪問 memory,這是非法的。 沒有分配的memory不要讀取。
數組索引從 0 而不是 1 開始。因此數組的第六個元素位於索引 position 5。
原始問題:
處理完所有錯誤后,您可以在主 function 中使用 for 循環打印數組的所有值。
考慮將 function 的返回類型更改為 void,因為在修改它時不需要將數組返回給 main。 該數組衰減為 function 參數中的指針,因此它更像是一個別名。 它們都指向相同的 memory,如果您通過一個或另一個修改 memory,則兩個 memory 都會被修改。
PS:如有不明之處,可追問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.