簡體   English   中英

將數組傳遞給 function 然后在 main function 中打印該數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM