我目前在教自己一點C,並從可執行文件收到一個奇怪的響應。這是代碼。程序在數據類型改變後不顯示第一個操作數
#include <stdio.h>
int main()
{
int a, b; /* the operands in the arithmetic */
while(1) {
printf("\n\n\n enter two integers: ");
scanf("%d %d", &a, &b);
printf("\n %d + %d is %d", a, b, a + b);
printf("\n %d - %d is %d", a, b, a - b);
printf("\n %d * %d is %d", a, b, a * b);
printf("\n %d/ %d is %d", a, b, a/b);
printf("\n %d mod %d is %d", a, b, a % b);
}
return 0;
}
運行此操作時,使用如所示的int數據類型,它會生成以下輸出。
輸入兩個整數:32000 32000
32000 + 32000 is 64000
32000 - 32000 is 0
32000 * 32000 is 1024000000
32000/32000 is 1
32000 mod 32000 is 0
正如你可以看到輸出是可以預期。但是,當int被替換爲short且沒有其他更改時,程序將生成以下輸出。
輸入兩個整數:32000 32000
0 + 32000 is 32000
0 - 32000 is -32000
0 * 32000 is 0
0/32000 is 0
0 mod 32000 is 0
正如你可以清楚地看到該程序不再顯示第一個操作數,即使32000是海灣合作委員會的文件說可以通過短表示的範圍,這是內 - 32767至32767.我不明白這一點。
進一步的研究顯示,與scanf()的函數,我應該使用包括在格式規範修飾符H帶%HD替換%d。我的理解是,只使用%d與scanf()會導致編譯器或硬件「扔掉」前兩個字節。
我實在不明白的是爲什麼是隻有第一個操作的影響考慮scanf()的使用(不正確)%d格式說明符的兩個實例?
,你或許可以給任何幫助,將不勝感激。
最好的問候,
斯圖爾特
從一本很好的C書中學習,而不是從在線教程中學習。這些教程很好的參考,但總是會讓你成爲一個有很多漏洞的c程序員。 –
嗨阿希什,感謝您的答覆。我正在從一本書教我自己。它是由Kenneth E. Martin所着的「C through UNIX」。無可否認它是一本較舊的書,但確實需要我更多地關注語言中的關係。在這種情況下,聲明中使用的數據類型與要使用的最合適的格式說明符之間的關係,以及使用RAM的含義。也感謝關於教程的提示。我會牢記這一點。 – Stuart