2013-11-09 185 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