C/C++學習筆記——C基礎:數據類型

常量與變量

關鍵字

在這裏插入圖片描述

數據類型

數據類型的作用:編譯器預算對象(變量)分配的內存空間大小。
在這裏插入圖片描述

常量

常量:

  • 在程序運行過程中,其值不能被改變的量
  • 常量一般出現在表達式或賦值語句中
整型常量 100,200,-100,0
實型常量 3.14 , 0.125,-3.123
字符型常量 ‘a’,‘b’,‘1’,‘\n’
字符串常量 “a”,“ab”,“12356”

變量

  1. 變量
    變量:
  • 在程序運行過程中,其值可以改變
  • 變量在使用前必須先定義,定義變量前必須有相應的數據類型

標識符命名規則:

  • 標識符不能是關鍵字
  • 標識符只能由字母、數字、下劃線組成
  • 第一個字符必須爲字母或下劃線
  • 標識符中字母區分大小寫

變量特點:

  • 變量在編譯時爲其分配相應的內存空間
  • 可以通過其名字和地址訪問相應內存
    在這裏插入圖片描述
  1. 聲明和定義區別
  • 聲明變量不需要建立存儲空間,如:extern int a;
  • 定義變量需要建立存儲空間,如:int b;
#include <stdio.h>

int main()
{
	//extern 關鍵字只做聲明,不能做任何定義,後面還會學習,這裏先了解
	//聲明一個變量a,a在這裏沒有建立存儲空間
	extern int a;
	a = 10;	//err, 沒有空間,就不可以賦值

	int b = 10;	//定義一個變量b,b的類型爲int,b賦值爲10

	return 0;
}

從廣義的角度來講聲明中包含着定義,即定義是聲明的一個特例,所以並非所有的聲明都是定義:

  • int b 它既是聲明,同時又是定義
  • 對於 extern b來講它只是聲明不是定義

一般的情況下,把建立存儲空間的聲明稱之爲“定義”,而把不需要建立存儲空間的聲明稱之爲“聲明”。

使用示例

#include <stdio.h>
#define MAX 10 //聲明瞭一個常量,名字叫MAX,值是10,常量的值一旦初始化不可改

int main()
{
	int a;	//定義了一個變量,其類型爲int,名字叫a

	const int b = 10; //定義一個const常量,名爲叫b,值爲10
	//b = 11; //err,常量的值不能改變

	//MAX = 100;	//err,常量的值不能改變

	a = MAX;//將abc的值設置爲MAX的值
	a = 123;

	printf("%d\n", a); //打印變量a的值

	return 0;
}

進制

進制也就是進位制,是人們規定的一種進位方法。 對於任何一種進制—X進制,就表示某一位置上的數運算時是逢X進一位。 十進制是逢十進一,十六進制是逢十六進一,二進制就是逢二進一,以此類推,x進制就是逢x進位。

十進制 二進制 八進制 十六進制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10

二進制

二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數爲2,進位規則是“逢二進一”,借位規則是“借一當二”。

當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。

術語 含義
bit(比特) 一個二進制代表一位,一個位只能表示0或1兩種狀態。數據傳輸是習慣以“位”(bit)爲單位。
Byte(字節) 一個字節爲8個二進制,稱爲8位,計算機中存儲的最小單位是字節。數據存儲是習慣以“字節”(Byte)爲單位。
WORD(雙字節) 2個字節,16位
DWORD 兩個WORD,4個字節,32位
1b 1bit,1位
1B 1Byte,1字節,8位
1k,1K 1024
1M(1兆) 1024k, 1024*1024
1G 1024M
1T 1024G
1Kb(千位) 1024bit,1024位
1KB(千字節) 1024Byte,1024字節
1Mb(兆位) 1024Kb = 1024 * 1024bit
1MB(兆字節) 1024KB = 1024 * 1024Byte

十進制轉化二進制的方法:用十進制數除以2,分別取餘數和商數,商數爲0的時候,將餘數倒着數就是轉化後的結果。
在這裏插入圖片描述
十進制的小數轉換成二進制:小數部分和2相乘,取整數,不足1取0,每次相乘都是小數部分,順序看取整後的數就是轉化後的結果。
在這裏插入圖片描述

八進制

八進制,Octal,縮寫OCT或O,一種以8爲基數的計數法,採用0,1,2,3,4,5,6,7八個數字,逢八進1。一些編程語言中常常以數字0開始表明該數字是八進制。

八進制的數和二進制數可以按位對應(八進制一位對應二進制三位),因此常應用在計算機語言中。
在這裏插入圖片描述
十進制轉化八進制的方法:
用十進制數除以8,分別取餘數和商數,商數爲0的時候,將餘數倒着數就是轉化後的結果。
在這裏插入圖片描述

十六進制

十六進制(英文名稱:Hexadecimal),同我們日常生活中的表示法不一樣,它由0-9,A-F組成,字母不區分大小寫。與10進制的對應關係是:0-9對應0-9,A-F對應10-15。

十六進制的數和二進制數可以按位對應(十六進制一位對應二進制四位),因此常應用在計算機語言中。
在這裏插入圖片描述
十進制轉化十六進制的方法:
用十進制數除以16,分別取餘數和商數,商數爲0的時候,將餘數倒着數就是轉化後的結果。
在這裏插入圖片描述

C語言如何表示相應進制數

十進制 以正常數字1-9開頭,如123
八進制 以數字0開頭,如0123
十六進制 以0x開頭,如0x123
二進制 C語言不能直接書寫二進制數
#include <stdio.h>

int main()
{
	int a = 123;		//十進制方式賦值
	int b = 0123;		//八進制方式賦值, 以數字0開頭
	int c = 0xABC;	//十六進制方式賦值

	//如果在printf中輸出一個十進制數那麼用%d,八進制用%o,十六進制是%x
	printf("十進制:%d\n",a );
	printf("八進制:%o\n", b);	//%o,爲字母o,不是數字
	printf("十六進制:%x\n", c);

	return 0;
}

計算機內存數值存儲方式

原碼

一個數的原碼(原始的二進制碼)有如下特點:

  • 最高位做爲符號位,0表示正,爲1表示負
  • 其它數值部分就是數值本身絕對值的二進制數
  • 負數的原碼是在其絕對值的基礎上,最高位變爲1
    下面數值以1字節的大小描述:
十進制數 原碼
+15 0000 1111
-15 1000 1111
+0 0000 0000
-0 1000 0000

原碼錶示法簡單易懂,與帶符號數本身轉換方便,只要符號還原即可,但當兩個正數相減或不同符號數相加時,必須比較兩個數哪個絕對值大,才能決定誰減誰,才能確定結果是正還是負,所以原碼不便於加減運算

反碼

  • 對於正數,反碼與原碼相同
  • 對於負數,符號位不變,其它部分取反(1變0,0變1)
十進制數 反碼
+15 0000 1111
-15 1111 0000
+0 0000 0000
-0 1111 1111

反碼運算也不方便,通常用來作爲求補碼的中間過渡。

補碼

在計算機系統中,數值一律用補碼來存儲。

補碼特點:

  • 對於正數,原碼、反碼、補碼相同
  • 對於負數,其補碼爲它的反碼加1
  • 補碼符號位不動,其他位求反,最後整個數加1,得到原碼
十進制數 補碼
+15 0000 1111
-15 1111 0001
+0 0000 0000
-0 0000 0000
#include <stdio.h>

int main()
{
	int  a = -15;

	printf("%x\n", a);
	//結果爲 fffffff1
	//fffffff1對應的二進制:1111 1111 1111 1111 1111 1111 1111 0001
	//符號位不變,其它取反:1000 0000 0000 0000 0000 0000 0000 1110
	//上面加1:1000 0000 0000 0000 0000 0000 0000 1111  最高位1代表負數,就是-15

	return 0;
}

補碼的意義

示例1:用8位二進制數分別表示+0和-0

十進制數 原碼
+0 0000 0000
-0 1000 0000
十進制數 反碼
+0 0000 0000
-0 1111 1111

不管以原碼方式存儲,還是以反碼方式存儲,0也有兩種表示形式。爲什麼同樣一個0有兩種不同的表示方法呢?

但是如果以補碼方式存儲,補碼統一了零的編碼:

十進制數 補碼
+0 0000 0000
-0 10000 0000由於只用8位描述,最高位1丟棄,變爲0000 0000

示例2:計算9-6的結果
以原碼方式相加:

十進制數 原碼
9 0000 1001
-6 1000 0110

在這裏插入圖片描述
結果爲-15,不正確。

以補碼方式相加:

十進制數 補碼
9 0000 1001
-6 1111 1010

在這裏插入圖片描述
最高位的1溢出,剩餘8位二進制表示的是3,正確。

在計算機系統中,數值一律用補碼來存儲,主要原因是:

  • 統一了零的編碼
  • 將符號位和其它位統一處理
  • 將減法運算轉變爲加法運算
  • 兩個用補碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄

sizeof關鍵字

  • sizeof不是函數,所以不需要包含任何頭文件,它的功能是計算一個數據類型的大小,單位爲字節
  • sizeof的返回值爲size_t
  • size_t類型在32位操作系統下是unsigned int,是一個無符號的整數
#include <stdio.h>

int main()
{
	int a;
	int b = sizeof(a);//sizeof得到指定值佔用內存的大小,單位:字節
	printf("b = %d\n", b);

	size_t c = sizeof(a);
	printf("c = %u\n", c);//用無符號數的方式輸出c的值

	return 0;
}

整型:int

整型變量的定義和輸出

打印格式 含義
%d 輸出一個有符號的10進制int類型
%o(字母o) 輸出8進制的int類型
%x 輸出16進制的int類型,字母以小寫輸出
%X 輸出16進制的int類型,字母以大寫寫輸出
%u 輸出一個10進制的無符號數
#include <stdio.h>

int main()
{
	int a = 123;	//定義變量a,以10進制方式賦值爲123
	int b = 0567;	//定義變量b,以8進制方式賦值爲0567
	int c = 0xabc;	//定義變量c,以16進制方式賦值爲0xabc

	printf("a = %d\n", a);
	printf("8進制:b = %o\n", b);
	printf("10進制:b = %d\n", b);
	printf("16進制:c = %x\n", c);
	printf("16進制:c = %X\n", c);
	printf("10進制:c = %d\n", c);

	unsigned int d = 0xffffffff; //定義無符號int變量d,以16進制方式賦值
	printf("有符號方式打印:d = %d\n", d);
	printf("無符號方式打印:d = %u\n", d);
	return 0;
}

整型變量的輸入

#include <stdio.h>

int main()
{
	int a;
	printf("請輸入a的值:");

	//不要加“\n”
	scanf("%d", &a);

	printf("a = %d\n", a); //打印a的值

	return 0;
}

short、int、long、long long

數據類型 佔用空間
short(短整型) 2字節
int(整型) 4字節
long(長整形) Windows爲4字節,Linux爲4字節(32位),8字節(64位)
long long(長長整形) 8字節

注意:

  • 需要注意的是,整型數據在內存中佔的字節數與所選擇的操作系統有關。雖然 C 語言標準中沒有明確規定整型數據的長度,但 long 類型整數的長度不能短於 int 類型, short 類型整數的長度不能短於 int 類型。
  • 當一個小的數據類型賦值給一個大的數據類型,不會出錯,因爲編譯器會自動轉化。但當一個大的類型賦值給一個小的數據類型,那麼就可能丟失高位。
整型常量 所需類型
10 代表int類型
10l, 10L 代表long類型
10ll, 10LL 代表long long類型
10u, 10U 代表unsigned int類型
10ul, 10UL 代表unsigned long類型
10ull, 10ULL 代表unsigned long long類型
打印格式 含義
%hd 輸出short類型
%d 輸出int類型
%l 輸出long類型
%ll 輸出long long類型
%hu 輸出unsigned short類型
%u 輸出unsigned int類型
%lu 輸出unsigned long類型
%llu 輸出unsigned long long類型
#include <stdio.h>

int main()
{
	short a = 10;
	int b = 10;
	long c = 10l; //或者10L
	long long d = 10ll; //或者10LL

	printf("sizeof(a) = %u\n", sizeof(a));
	printf("sizeof(b) = %u\n", sizeof(b));
	printf("sizeof(c) = %u\n", sizeof(c));
	printf("sizeof(c) = %u\n", sizeof(d));

	printf("short a = %hd\n", a);
	printf("int b = %d\n", b);
	printf("long c = %ld\n", c);
	printf("long long d = %lld\n", d);

	unsigned short a2 = 20u;
	unsigned int b2 = 20u;
	unsigned long c2= 20ul; 
	unsigned long long d2 = 20ull; 

	printf("unsigned short a = %hu\n", a2);
	printf("unsigned int b = %u\n", b2);
	printf("unsigned long c = %lu\n", c2);
	printf("unsigned long long d = %llu\n", d2);

	return 0;
}

有符號數和無符號數區別

  1. 有符號數
    有符號數是最高位爲符號位,0代表正數,1代表負數。
    在這裏插入圖片描述
#include <stdio.h>

int main()
{
	signed int a = -1089474374; //定義有符號整型變量a
	printf("%X\n", a); //結果爲 BF0FF0BA

	//B       F      0        F       F     0        B	      A
	//1011 1111 0000 1111 1111 0000 1011 1010

	return 0;
}

  1. 無符號數
    無符號數最高位不是符號位,而就是數的一部分,無符號數不可能是負數。
    在這裏插入圖片描述
#include <stdio.h>

int main()
{
	unsigned int a = 3236958022; //定義無符號整型變量a
	printf("%X\n", a); //結果爲 C0F00F46

	return 0;
}

當我們寫程序要處理一個不可能出現負值的時候,一般用無符號數,這樣可以增大數的表達最大值。

  1. 有符號和無符號整型取值範圍
數據類型 佔用空間 取值範圍
short 2字節 -32768 到 32767 (-215 ~ 215-1)
int 4字節 -2147483648 到 2147483647 (-231 ~ 231-1)
long 4字節 -2147483648 到 2147483647 (-231 ~ 231-1)
unsigned short 2字節 0 到 65535 (0 ~ 216-1)
unsigned int 4字節 0 到 4294967295 (0 ~ 232-1)
unsigned long 4字節 0 到 4294967295 (0 ~ 232-1)

字符型:char

字符變量的定義和輸出

字符型變量用於存儲一個單一字符,在 C 語言中用 char 表示,其中每個字符變量都會佔用 1 個字節。在給字符型變量賦值時,需要用一對英文半角格式的單引號(’ ')把字符括起來。

字符變量實際上並不是把該字符本身放到變量的內存單元中去,而是將該字符對應的 ASCII 編碼放到變量的存儲單元中。char的本質就是一個1字節大小的整型。

#include <stdio.h>

int main()
{
	char ch = 'a';
	printf("sizeof(ch) = %u\n", sizeof(ch));

	printf("ch[%%c] = %c\n", ch); //打印字符
	printf("ch[%%d] = %d\n", ch); //打印‘a’ ASCII的值

	char A = 'A';
	char a = 'a';
	printf("a = %d\n", a);		//97
	printf("A = %d\n", A);	//65

	printf("A = %c\n", 'a' - 32); //小寫a轉大寫A
	printf("a = %c\n", 'A' + 32); //大寫A轉小寫a

	ch = ' ';
	printf("空字符:%d\n", ch); //空字符ASCII的值爲32
	printf("A = %c\n", 'a' - ' '); //小寫a轉大寫A
	printf("a = %c\n", 'A' + ' '); //大寫A轉小寫a

	return 0;
}

ASCII對照表

ASCII值 控制字符 ASCII值 字符 ASCII值 字符 ASCII值 字符
0 NUT 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL

ASCII 碼大致由以下兩部分組成:

  • ASCII 非打印控制字符: ASCII 表上的數字 0-31 分配給了控制字符,用於控制像打印機等一些外圍設備。
  • ASCII 打印字符:數字 32-126 分配給了能在鍵盤上找到的字符,當查看或打印文檔時就會出現。數字 127 代表 Del 命令。

轉義字符

轉義字符 含義 ASCII碼值(十進制)
\a 警報 007
\b 退格(BS) ,將當前位置移到前一列 008
\f 換頁(FF),將當前位置移到下頁開頭 012
\n 換行(LF) ,將當前位置移到下一行開頭 010
\r 回車(CR) ,將當前位置移到本行開頭 013
\t 水平製表(HT) (跳到下一個TAB位置) 009
\v 垂直製表(VT) 011
\\ 代表一個反斜線字符"\" 092
\’ 代表一個單引號(撇號)字符 039
\" 代表一個雙引號字符 034
\? 代表一個問號 063
\0 數字0 000
\ddd 8進制轉義字符,d範圍0~7 3位8進制
\xhh 16進制轉義字符,h範圍09,af,A~F 3位16進制

注意:紅色字體標註的爲不可打印字符。

#include <stdio.h>

int main()
{
	printf("abc");
	printf("\refg\n"); //\r切換到句首, \n爲換行鍵

	printf("abc");
	printf("\befg\n");//\b爲退格鍵, \n爲換行鍵

	printf("%d\n", '\123');// '\123'爲8進制轉義字符,0123對應10進制數爲83
	printf("%d\n", '\x23');// '\x23'爲16進制轉義字符,0x23對應10進制數爲35

	return 0;
}

數值溢出

當超過一個數據類型能夠存放最大的範圍時,數值會溢出。

有符號位最高位溢出的區別:符號位溢出會導致數的正負發生改變,但最高位的溢出會導致最高位丟失。

數據類型 佔用空間 取值範圍
char 1字節 -128到 127(-27 ~ 27-1)
unsigned char 1字節 0 到 255(0 ~ 28-1)
#include <stdio.h>

int main()
{
	char ch;

	//符號位溢出會導致數的正負發生改變
	ch = 0x7f + 2; //127+2
	printf("%d\n", ch);
	//	0111 1111
	//+2後 1000 0001,這是負數補碼,其原碼爲 1111 1111,結果爲-127

	//最高位的溢出會導致最高位丟失
	unsigned char ch2;
	ch2 = 0xff+1; //255+1
	printf("%u\n", ch2);
	//	  1111 1111
	//+1後 10000 0000, char只有8位最高位的溢出,結果爲0000 0000,十進制爲0

	ch2 = 0xff + 2; //255+1
	printf("%u\n", ch2);
	//	  1111 1111
	//+1後 10000 0001, char只有8位最高位的溢出,結果爲0000 0001,十進制爲1

	return 0;
}

實型(浮點型):float、double

實型變量也可以稱爲浮點型變量,浮點型變量是用來存儲小數數值的。在C語言中, 浮點型變量分爲兩種: 單精度浮點數(float)、 雙精度浮點數(double), 但是double型變量所表示的浮點數比 float 型變量更精確。

數據類型 佔用空間 有效數字範圍
float 4字節 7位有效數字
double 8字節 15~16位有效數字

由於浮點型變量是由有限的存儲單元組成的,因此只能提供有限的有效數字。在有效位以外的數字將被捨去,這樣可能會產生一些誤差。

不以f結尾的常量是double類型,以f結尾的常量(如3.14f)是float類型。

#include <stdio.h>

int main()
{
	//傳統方式賦值
	float a = 3.14f; //或3.14F
	double b = 3.14;

	printf("a = %f\n", a);
	printf("b = %lf\n", b);

	//科學法賦值
	a = 3.2e3f; //3.2*1000 = 32000,e可以寫E
	printf("a1 = %f\n", a);

	a = 100e-3f; //100*0.001 = 0.1
	printf("a2 = %f\n", a);

	a = 3.1415926f;
	printf("a3 = %f\n", a); //結果爲3.141593

	return 0;
}

類型限定符

限定符 含義
extern 聲明一個變量,extern聲明的變量沒有建立存儲空間。extern int a;
const 定義一個常量,常量的值不能修改。const int a = 10;
volatile 防止編譯器優化代碼
register 定義寄存器變量,提高效率。register是建議型的指令,而不是命令型的指令,如果CPU有空閒寄存器,那麼register就生效,如果沒有空閒寄存器,那麼register無效。

字符串格式化輸出和輸入

字符串常量

  • 字符串是內存中一段連續的char空間,以’\0’(數字0)結尾。
  • 字符串常量是由雙引號括起來的字符序列,如“china”、“C program”,“$12.5”等都是合法的字符串常量。

字符串常量與字符常量的不同:
在這裏插入圖片描述
每個字符串的結尾,編譯器會自動的添加一個結束標誌位’\0’,即 “a” 包含兩個字符’a’和’\0’。

printf函數和putchar函數

printf是輸出一個字符串,putchar輸出一個char。

printf格式字符:

打印格式 對應數據類型 含義
%d int 接受整數值並將它表示爲有符號的十進制整數
%hd short int 短整數
%hu unsigned short 無符號短整數
%o unsigned int 無符號8進制整數
%u unsigned int 無符號10進制整數
%x,%X unsigned int 無符號16進制整數,x對應的是abcdef,X對應的是ABCDEF
%f float 單精度浮點數
%lf double 雙精度浮點數
%e,%E double 科學計數法表示的數,此處"e"的大小寫代表在輸出時用的"e"的大小寫
%c char 字符型。可以把輸入的數字按照ASCII碼相應轉換爲對應的字符
%s char * 字符串。輸出字符串中的字符直至字符串中的空字符(字符串以’\0‘結尾,這個’\0’即空字符)

printf附加格式:

字符 含義
l(字母l) 附加在d,u,x,o前面,表示長整數
- 左對齊
m(代表一個整數) 數據最小寬度
0(數字0) 將輸出的前面補上0直到佔滿指定列寬爲止不可以搭配使用-
m.n(代表一個整數) m指域寬,即對應的輸出項在輸出設備上所佔的字符數。n指精度,用於說明輸出的實型數的小數位數。對數值型的來說,未指定n時,隱含的精度爲n=6位。
#include <stdio.h>
int main()
{
	int a = 100;
	printf("a = %d\n", a);//格式化輸出一個字符串
	printf("%p\n", &a);//輸出變量a在內存中的地址編號
	printf("%%d\n");

	char c = 'a';
	putchar(c);//putchar只有一個參數,就是要輸出的char
	long a2 = 100;
	printf("%ld, %lx, %lo\n", a2, a2, a2);

	long long a3 = 1000;
	printf("%lld, %llx, %llo\n", a3, a3, a3);

	int abc = 10;
	printf("abc = '%6d'\n", abc);
	printf("abc = '%-6d'\n", abc);
	printf("abc = '%06d'\n", abc);
	printf("abc = '%-06d'\n", abc);

	double d = 12.3;
	printf("d = \' %-10.3lf \'\n", d);

	return 0;
}

scanf函數與getchar函數

  • getchar是從標準輸入設備讀取一個char。
  • scanf通過%轉義的方式可以得到用戶通過標準輸入設備輸入的數據。
#include <stdio.h>

int main()
{
	char ch1;
	char ch2;
	char ch3;
	int a;
	int b;

	printf("請輸入ch1的字符:");
	ch1 = getchar();
	printf("ch1 = %c\n", ch1);

	getchar(); //測試此處getchar()的作用

	printf("請輸入ch2的字符:");
	ch2 = getchar();
	printf("\'ch2 = %ctest\'\n", ch2);

	getchar(); //測試此處getchar()的作用
	printf("請輸入ch3的字符:");
	scanf("%c", &ch3);//這裏第二個參數一定是變量的地址,而不是變量名
	printf("ch3 = %c\n", ch3);

	printf("請輸入a的值:");
	scanf("%d", &a);
	printf("a = %d\n", a);

	printf("請輸入b的值:");
	scanf("%d", &b);
	printf("b = %d\n", b);

	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章