グローバル変数をローカル変数に割り当てる、次のことを試みています。
#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;
しかし、2 番目のバージョンは最初のバージョンほど賢明ではないと思います。それを行うには説得力のある (しかしまだ述べられていない) 理由が必要です。
そのはず
#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 マクロの定義は、次の 1 つの点を除いて適切です。マクロは単純な置換であり、構文は「=」を使用しないため、「=」は実際にはマクロの一部です。つまり、「DECK_SIZE」をどこでも「= 52」に置き換えるようコンパイラーに要求していることを意味します。「=」記号を取り除きたいと思うでしょう:#define DECK_SIZE 52
それが役立つことを願っています:-)