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時,就把換行符轉換為回車和換行兩個操作,輸出一個換行,後面的
下面回答問題:
(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’。