我正在尝试执行以下操作,将全局变量分配给局部变量:
#define DECK_SIZE = 52
...
int *numberOfDecks;
scanf("%d", &numberOfDecks);
int shoeSize = *numberOfDecks * DECK_SIZE;
自从我用 C 编写任何东西以来已经有一段时间了,但据我回忆,这应该是可能的吗?
我正在尝试执行以下操作,将全局变量分配给局部变量:
#define DECK_SIZE = 52
...
int *numberOfDecks;
scanf("%d", &numberOfDecks);
int shoeSize = *numberOfDecks * DECK_SIZE;
自从我用 C 编写任何东西以来已经有一段时间了,但据我回忆,这应该是可能的吗?
你的主要问题是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;
但我认为第二个版本不如第一个版本明智;这样做必须有一个令人信服的(但尚未说明的)理由。
它应该是
#define DECK_SIZE 52
你的 int *numberOfDecks 应该是
int numberOfDecks
int *numberOfDecks;
scanf("%d", &numberOfDecks);
由于 numberOfDecks 已经是一个指针,因此您不需要获取它的地址。只需传递numberOfDecks
给scanf。(或者使它不是指针并同样修改其余代码。)
你define
错了,应该是
#define DECK_SIZE 52
您还有一个未初始化的指针,这可能被认为是一种不好的做法。
编辑:
如其他答案中所述,您对 scanf 的论点也有问题。
错误:
=
numberofdecks
是未初始化的指针scanf
忽略的结果可能的修复:
const int DECK_SIZE = 52;
...
int numberOfDecks;
if (scanf("%d", &numberOfDecks) == 1)
{
int shoeSize = numberOfDecks * DECK_SIZE;
}
您的numberOfDecks
变量类型错误。您已将其设为指针scanf
,调用将向指针写入一个值,从而有效地更改它指向的位置。你只想要一个普通的整数。
DECK_SIZE 宏的定义很好,除了一件事:宏是直接替换,并且语法不使用“=”,因此“=”实际上是宏的一部分。这意味着您要求编译器在任何地方用“= 52”替换“DECK_SIZE”。你会想要摆脱'='符号:#define DECK_SIZE 52
希望有帮助:-)