1

グローバル変数をローカル変数に割り当てる、次のことを試みています。

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

Cで何かをプログラミングしてからしばらく経ちましたが、私の記憶では、これは可能でしょうか?

4

6 に答える 6

3

あなたの主な問題は、それがではなく であるnumberOfDecksべきだということです。でなければならない場合は、それが指す場所も提供する必要があります。intint *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 番目のバージョンは最初のバージョンほど賢明ではないと思います。それを行うには説得力のある (しかしまだ述べられていない) 理由が必要です。

于 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 は既にポインターであるため、そのアドレスを取得する必要はありません。numberOfDecksscanf に渡すだけです。(または、ポインターではなく、残りのコードを同様に変更します。)

于 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 マクロの定義は、次の 1 つの点を除いて適切です。マクロは単純な置換であり、構文は「=」を使用しないため、「=」は実際にはマクロの一部です。つまり、「DECK_SIZE」をどこでも「= 52」に置き換えるようコンパイラーに要求していることを意味します。「=」記号を取り除きたいと思うでしょう:#define DECK_SIZE 52

それが役立つことを願っています:-)

于 2013-05-10T23:02:42.690 に答える