1. 程式人生 > >c語言:用getchar函式讀入兩個字元給c1,c2,用putchar和printf輸出。思考問題

c語言:用getchar函式讀入兩個字元給c1,c2,用putchar和printf輸出。思考問題

用getchar函式讀入兩個字元給c1,c2,分別用putchar和printf輸出這兩個字元。思考以下問題:

(1)變數c1和c2定義為字元型還是整型?或二者皆可?

(2)要求輸出c1和c2的ASCII碼,應如何處理?

(3)整形變數和字元變數是否在任何情況下都可以互相代替?char c1, c2;int  c1, c2;是否無條件等價?

程式:

#include<stdio.h>

int main()

{

char c1, c2;

printf("請輸入兩個字元c1,c2:");//輸入的兩個字元之間沒有空格,連續輸入

c1 = getchar();

c2 = getchar();

printf("用putchar輸出結果為:");

putchar(c1);

putchar(c2);

printf("\n");

printf("用printf輸出結果為:");

printf("%c %c\n",c1,c2);

/*printf("%d,%d\n", c1, c2);*/

return 0;

}

結果:

請輸入兩個字元c1,c2:ab

用putchar輸出結果為:ab

用printf輸出結果為:a b

請按任意鍵繼續. . .

注意:輸入的兩個字元之間沒有空格,連續輸入。

如果分兩行輸入a,b,則:

請輸入兩個字元c1,c2:a

用putchar輸出結果為:a

用printf輸出結果為:a

請按任意鍵繼續. . .

輸入a後按回車鍵,結果還未來得及輸入b,程式馬上輸出了其下4行結果(包括2個空行)。用putchar輸出c1,就輸出了字元a,在輸出c2時,就把換行符轉換為回車和換行兩個操作,輸出一個換行,後面的

printf("\n");又輸出一個換行,所以就相當於輸出一個空行,此行不顯示任何字元。後面用printf函式輸出c1和c2,同樣也輸出了字元a和一個空行。

下面回答問題:

(1)c1和c2可以定義為字元型或整型,二者皆可。

(2)用printf函式輸出,使用%d格式符,即:

printf("%d,%d\n", c1, c2);

結果為:97,98

(3)字元變數佔1個位元組,整型變數佔2或4個位元組。故整型變數在可輸出字元的範圍內(ASCII碼為0到127之間的字元)是可以與字元型資料互相轉換的。如果整數在此範圍外,不能代替。

拓展延伸:

程式1:

#include<stdio.h>

int main()

{

int  c1, c2;

printf("請輸入兩個整數c1,c2:");

scanf("%d,%d", &c1, &c2);

printf("按字元輸出結果為:\n");

printf("%c,%c\n", c1, c2);

printf("按ASCII碼輸出結果為:\n");

printf("%d,%d\n", c1, c2);

return 0;

}

結果:

請輸入兩個整數c1,c2:97,98

按字元輸出結果為:

a,b

按ASCII碼輸出結果為:

97,98

請按任意鍵繼續. . .

程式2:

#include<stdio.h>

int main()

{

char c1, c2;

int i1, i2;

printf("請輸入兩個字元c1,c2:");

scanf("%c,%c", &c1, &c2);

i1 = c1;

i2 = c2;

printf("按字元輸出結果為:\n");

printf("%c,%c\n", c1, c2);

printf("按整數輸出結果為:\n");

printf("%d,%d\n", c1, c2);

return 0;

}

結果:

請輸入兩個字元c1,c2:a,b

按字元輸出結果為:

a,b

按整數輸出結果為:

97,98

請按任意鍵繼續. . .

程式3:

#include<stdio.h>

int main()

{

char c1, c2;

int i1, i2;

printf("請輸入兩個整數i1,i2:");

scanf("%d,%d", &i1, &i2);

c1 = i1;

c2 = i2;

printf("按字元輸出結果為:\n");

printf("%c,%c\n", c1, c2);

printf("按整數輸出結果為:\n");

printf("%d,%d\n", c1, c2);

return 0;

}

結果:

請輸入兩個整數i1,i2:289,330

按字元輸出結果為:

!,J

按整數輸出結果為:

33,74

請按任意鍵繼續. . .

整型變數i1和i2在記憶體中佔2或4個位元組,而字元變數c1,c2只佔一個位元組,unsigned char型別可存放0到255的範圍內整數,signed char型別可存放-128到127的範圍內整數,現在輸入的i1和i2的的值已經超過0到255的範圍,i1和i2在記憶體中的儲存情況如下表所示:(為簡單起見,用兩個位元組表示)

高8位

低8位

i1

00000001

00100001

i2

00000001

01001010

資料是整數74,是字元i1低8位的資料是整數33,是字元’!’的ASCII碼值,故用字元輸出c1得到字元’!’,i2低8位的’j’的ASCII碼值,故用字元輸出c1得到字元’j’。