我有以下结构:
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 (我确保它为我提供输入)...我似乎有重叠?请帮忙。
答案 0 :(得分:1)
你的问题是指针。我假设您按如下方式初始化结构。
numbers *numbers;
但是,如果您在声明它的主要区域使用它,则不使用指针。你的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;
}
正在运行示例here
答案 1 :(得分:-1)
您错误答案的原因是因为您将数据类型保持为int,其最大值为32767,将其更改为unsigned long int,因为您的ans计算为2400612