1

我正在尝试执行以下操作,将全局变量分配给局部变量:

#define DECK_SIZE = 52
...
int *numberOfDecks;
scanf("%d", &numberOfDecks);
int shoeSize = *numberOfDecks * DECK_SIZE;

自从我用 C 编写任何东西以来已经有一段时间了,但据我回忆,这应该是可能的吗?

4

6 回答 6

3

你的主要问题是numberOfDecks应该是一个int,而不是一个int *。如果它必须是一个int *,你还需要提供一个int它指向的地方。

固定代码:

#define DECK_SIZE 52
...
int numberOfDecks;
if (scanf("%d", &numberOfDecks) != 1)
    ...handle format error...
int shoeSize = numberOfDecks * DECK_SIZE;

或者:

#define DECK_SIZE 52
...
int  actualNumberOfDecks;
int *numberOfDecks = &actualNumberOfDecks;
if (scanf("%d", numberOfDecks) != 1)
    ...handle format error...
int shoeSize = *numberOfDecks * DECK_SIZE;

但我认为第二个版本不如第一个版本明智;这样做必须有一个令人信服的(但尚未说明的)理由。

于 2013-05-10T23:00:38.327 回答
3

它应该是

#define DECK_SIZE 52

你的 int *numberOfDecks 应该是

int numberOfDecks
于 2013-05-10T23:00:41.010 回答
2
int *numberOfDecks;
scanf("%d", &numberOfDecks);

由于 numberOfDecks 已经是一个指针,因此您不需要获取它的地址。只需传递numberOfDecks给scanf。(或者使它不是指针并同样修改其余代码。)

于 2013-05-10T23:00:51.500 回答
2

define错了,应该是

#define DECK_SIZE 52

您还有一个未初始化的指针,这可能被认为是一种不好的做法。

编辑:

如其他答案中所述,您对 scanf 的论点也有问题。

于 2013-05-10T23:00:55.673 回答
2

错误:

  • 宏包含=
  • numberofdecks是未初始化的指针
  • scanf忽略的结果

可能的修复:

const int DECK_SIZE = 52;
...
int numberOfDecks;
if (scanf("%d", &numberOfDecks) == 1)
{
    int shoeSize = numberOfDecks * DECK_SIZE;
}
于 2013-05-10T23:02:16.650 回答
2

您的numberOfDecks变量类型错误。您已将其设为指针scanf,调用将向指针写入一个值,从而有效地更改它指向的位置。你只想要一个普通的整数。

DECK_SIZE 宏的定义很好,除了一件事:宏是直接替换,并且语法不使用“=”,因此“=”实际上是宏的一部分。这意味着您要求编译器在任何地方用“= 52”替换“DECK_SIZE”。你会想要摆脱'='符号:#define DECK_SIZE 52

希望有帮助:-)

于 2013-05-10T23:02:42.690 回答