2013-11-09 272 views
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 

我无法找出问题。数量 - >最终可以得到的最高数字是90,000(我确定它,因为我给出的输入)...我似乎有重叠?请帮忙。

+4

'final'是'unsigned'和你'printf'这是签署'int's使用'%D'。 –

+0

粘贴的代码副本与输出无关,请粘贴您的真实代码。 – ouah

+0

我会如果我可以使用打印屏幕,但我不能作为该网站不会让我。 – user106453

回答

-1

原因你错误的答案是,因为你已经保持了数据类型为INT其中有32767将其更改为unsigned long int类型的最大值为您的ANS计算到2400612

+0

尝试使用%ld打印最终变量的值 – adi

+0

在我的64位系统上,unsigned int的最大值为4294967295,但是signed short int的最大值为32767 ... – jpw

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

+0

不,我用malloc创建结构体 – user106453

+0

在那种情况下它是相似的。 – Montaldo

+0

参见msg编辑 – user106453