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;

但是,如果您在声明它的 main 中使用它,请不要使用指针。您的 printf 调用中也有一些错误,您正在打印 y 和 z 的内存地址,而不是像 x 值那样打印的值。

使用这样的东西。

#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

您错误答案的原因是因为您将数据类型保留为 int 最大值为 32767 将其更改为 unsigned long int 因为您的 ans 计算为 2400612

于 2013-11-09T11:47:49.610 回答