用C编程,如何声明以后要使用的未知大小的数组?

时间:2018-05-04 05:42:49

标签: c

我正在为简单的纸牌游戏创建一个AI播放器。

将通过scanf输入合法卡的数量。 然后我想创建一个这样大小的数组。

但是,如果用户输入为0,我添加了一个if语句来防止错误。(因为你不能创建一个大小为0的数组。)

我的问题是......因为我在if语句中创建了它,我无法在if语句之外访问它。当我尝试在Mac上使用Xcode进行编译时,警告“使用未声明的标识符'legal_cards'”会显示这一点。

我喜欢有关如何更好地编写此程序的建议。 (我仍然需要使用scanf来获取输入,但也许有更好的方法o

唯一的方法是让我的所有代码都与if语句中的数组相关吗?或者我可以稍后使用它(使用另一个if语句检查以确保(n_legal_cards > 0)

#include <stdio.h>

int main (void) {
    int n_legal_cards;

    printf("How many legal cards are there?\n");
    scanf("%d", &n_legal_cards);

    if (n_legal_cards > 0) {
        int legal_cards[n_legal_cards];
    }

    /*
    ...
    [scanning other variables in here]
    [a little bit of other code here]
    ...
    */


    if (n_legal_cards > 0) {
        int rounds_suit = legal_cards[0];
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

您可以使用动态内存分配,这将允许您声明一个未知大小的数组,以便稍后使用at runtime

以下是您可以执行的操作示例:

#include <stdio.h>

int main (void) {
int n_legal_cards;
int* legal_cards;

printf("How many legal cards are there?\n");
scanf("%d", &n_legal_cards);

if (n_legal_cards > 0) {

    legal_cards = malloc(n_legal_cards * sizeof(int));

}


 /*
 ...
[scanning other variables in here]
[a little bit of other code here]
...
 */


if (n_legal_cards > 0) {
int rounds_suit = legal_cards[0];
}


    return 0;
}

答案 1 :(得分:1)

因此,如果我说得对,0是无效的用户输入。因此,只需在循环中检查,直到用户输入number > 0

//init the variable with 0
int n_legal_cards = 0;

//loop scanf until number > 0 is entered
while (true) {

    printf ("How many legal cards are there?\n");
    scanf ("%d", &n_legal_cards);

    if (n_legal_cards <= 0)
        printf ("Please enter a number > 0\n");
    else
        break;

}

//then init your array
int legal_cards[n_legal_cards];