1. 程式人生 > 實用技巧 >分析下面的程式:

分析下面的程式:

分析下面的程式:

#include<stdio.h>
int main()
{
	char c1, c2;
	c1 = 97;
	c2 = 98;
	printf("c1=%c, c2=%c\n", c1, c2);
	printf("c1=%d, c2=%d\n", c1, c2);
	return 0;
}

(1)執行時會輸出什麼資訊?為什麼?

​ 答:會輸出 :

​ c1=97, c2=98

​ 因為第一行十一字元形式輸出,所以會吧97和98當作相依字元的ascii值,輸出的時候按照字元顯示,

​ 第二行由於是以整形輸出,所以輸出對應整數值

(2)如果將程式第4,5行改為

c1 = 197;

c2 = 198;

執行時會輸出什麼資訊?為什麼?

​ 答: 會輸出:

​ 因為c1和c2為char型別,其儲存的資料範圍為-128~127,當c1=197,c2=198時,已經超出了char型別所能夠儲存的資料範圍,此時會進行相應的轉換為c1=-59,c2=-58,只是第一行以字元輸出時,c1=-59,c2=-58為不可顯示字元,所以輸出了?,而第二行以整數輸出時就進行了相應的整數顯示。

(3)如果將程式第3行改為

int c1, c2;

執行時會輸出什麼資訊?為什麼?

​ 答: 會輸出

​ 因為c1和c2為int時,第二行以整形輸出自然能夠儲存的下,但第一行以字元輸出時,雖然資料int能夠儲存,但是在輸出時需要準換為字元,轉換後資料就超出了範圍,此時c1=-59,c2=-58,兩者都為不可顯示字元,所以就顯示了?。