在计算中使用全局变量

时间:2013-05-10 22:58:16

标签: c global-variables variable-assignment

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

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

自从我用C语言编写任何东西已经有一段时间了,但是对于我的记忆,这应该是可能的吗?

6 个答案:

答案 0 :(得分: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;

但我认为第二个版本并不像第一个版本那样明智;这样做必须有令人信服的(但尚未说明的)原因。

答案 1 :(得分:3)

应该是

#define DECK_SIZE 52

你的int * numberOfDecks应该是

int numberOfDecks

答案 2 :(得分:2)

int *numberOfDecks;
scanf("%d", &numberOfDecks);

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

答案 3 :(得分:2)

您的define错了,应该是

#define DECK_SIZE 52

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

编辑:

您的scanf参数也存在问题,如其他答案中所述。

答案 4 :(得分:2)

错误:

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

可能的解决方法:

const int DECK_SIZE = 52;
...
int numberOfDecks;
if (scanf("%d", &numberOfDecks) == 1)
{
    int shoeSize = numberOfDecks * DECK_SIZE;
}

答案 5 :(得分:2)

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

DECK_SIZE宏的定义很好,除了一件事:宏是直接替换,语法不使用'=',所以'='实际上是宏的一部分。这意味着你要求编译器用“= 52”替换“DECK_SIZE”。你想要摆脱'='的标志:#define DECK_SIZE 52

希望有所帮助: - )