0

私は次の構造体を持っています:

typedef struct number
{
    int x;
    int y;
    int z;
    unsigned long int final;
}number;

私のコードは次のとおりです。

number* numbers;
numbers= (number*)malloc(sizeof(number));
scanf("%d %d %d", &numbers->x, &numbers->y, &numbers->z);
printf("input: %d,%d,%d\n",numbers->x, &numbers->y, &numbers->z);
numbers->final=(numbers->x)*4000 + (numbers->y)*50 + (numbers->z);
printf("final: %d",numbers->final);

しかし、出力は間違っています。たとえば、ここに実行があります:

12 12 12
input: 12,12,12
final: -28640

問題がわかりません。number->final が取得できる最大数は90,000です(入力を与えるときにそれを確認します)...重複があるように見えますか? 助けてください。

4

2 に答える 2

1

あなたの問題はポインタです。次のように構造体を初期化したと仮定しています。

numbers *numbers;

ただし、宣言するメインで使用する場合は、ポインターを使用しないでください。printf 呼び出しにもいくつかのエラーがあります。x 値に対して行ったような値ではなく、y と z のメモリ アドレスを出力しています。

このようなものを使用してください。

#include <stdio.h>

typedef struct number
{
    int x;
    int y;
    int z;
    unsigned int final;
} number;

int main()
{
  number numbers;

  scanf("%d %d %d", &numbers.x, &numbers.y, &numbers.z);
  printf("input: %d,%d,%d\n",numbers.x, numbers.y, numbers.z);
  numbers.final=(numbers.x)*4000 + (numbers.y)*50 + (numbers.z);
  printf("final: %d\n",numbers.final);

  return 0;
}

そうです、mallocを使用すると、次のようになります。

#include <stdio.h>
#include <stdlib.h>

typedef struct number
{
    int x;
    int y;
    int z;
    unsigned int final;
} number;

int main()
{
  number *numbers = malloc(1 * sizeof(number));

  scanf("%d %d %d", &numbers->x, &numbers->y, &numbers->z);
  printf("input: %d,%d,%d\n",numbers->x, numbers->y, numbers->z);
  numbers->final=(numbers->x)*4000 + (numbers->y)*50 + (numbers->z);
  printf("final: %d\n",numbers->final);

  free(numbers);

  return 0;
}

実行例はこちら

于 2013-11-09T11:58:02.110 に答える
-1

間違った答えの理由は、データ型を最大値が 32767 の int として保持しているため、ans が 2400612 に計算するときに unsigned long int に変更したためです。

于 2013-11-09T11:47:49.610 に答える