1. 程式人生 > >C語言(三 字串、結構體、共用體、輸入輸出)

C語言(三 字串、結構體、共用體、輸入輸出)

字串
字串是儲存了一些字元,最後以null(’/0’)結尾的一維字元陣列。

char str[6] = {'h','e','l','l','o','/0'};
char str[ ] = "hello" ;

還有一些字串操作函式:
1、strcpy(s1,s2) 複製s2到s1
2、strcat(s1,s2) 將s2連線到s1後
3、strlen(s1) 返回s1的長度
4、strcmp(s1,s2) 比較s1和s2,從左到右,按照ASC||碼大小比較,若相等,返回0,若s1<s2,則返回小於0;若s1>s2,則返回大於0;
5、strchr(s1,ch) 返回字元ch在s1中的位置
6、strstr(s1,s2) 返回字串s2在s1中第一次出現的位置

結構體
結構體是使用者自定義儲存型別不同的變數的資料型別。

struct Books{
	int id;
	char[10] des;
	double price;
	}
Books  b1,b2;   //定義兩個Books型別的結構體變數

在使用結構體內變數時,使用成員訪問運算子(.),如Books.id,結構體同樣可以作為函式引數。
結構體指標
定義方式與其他資料型別定義指標相似,struct Books * p = &b1;
要取到結構體內部資料,int num = p->id;

共用體
共用體是一種特殊的資料型別,它允許在記憶體中的同一位置儲存不同的資料型別。可以自定義一個帶有多個成員的共用體,但同一時間只能允許其中一種型別帶有值。

union Data{
	int i;
	float j;
	char [20] str;
	} data;
data.i = 10;

若我們按順序給data的三種資料型別賦值,那麼只有最後賦值是有效的,同一個記憶體位置只能儲存一個數據,而且共用體所佔大小是根據最大成員來決定的。

位,字,位元組
:"位(bit)“是電子計算機中最小的資料單位。每一位的狀態只能是0或1。
位元組:8個二進位制位構成1個"位元組(Byte)”,它是儲存空間的基本計量單位。1個位元組可以儲存1個英文字母或者半個漢字,換句話說,1個漢字佔據2個位元組的儲存空間。
:"字"由若干個位元組構成,字的位數叫做字長,不同檔次的機器有不同的字長。例如一臺8位機,它的1個字就等於1個位元組,字長為8位。如果是一臺16位機,那麼,它的1個字就由2個位元組構成,字長為16位。字是計算機進行資料處理和運算的單位。
一般的計算機都已經到了64位機 也就是說 一個基本單位就是64位,也就是8位元組了。這樣再綜合上面的分析就不難看出,結構體,共用體,位域的定義中,按順序分配記憶體,下一個欄位所佔大小如果超出了上一個欄位佔的記憶體單元剩餘部分,那麼它會重新申請下一個記憶體單元,而上一個多出部分將空著。

Typedef與#define
兩者作用相似,都可以為型別定義別名,但是#define也可以為數值定義別名,#define ONE 1; 還有一個區別就是,typedef是編譯器進行處理的,#define是預編譯器進行處理的。

C輸入&輸出
stdio.h 是C語言標準輸入輸出標頭檔案,#include 預編譯引入標頭檔案。
printf() 標準輸出(螢幕)
%d:格式化整數輸出;%f:格式化浮點數輸出。
getchar()讀取下一個鍵入的單個字元,並返回為整數;
**putchar()**向螢幕輸出一個單個字元,並返回相同的字元,兩個函式同時只能返回一個字元。
**gets(char * s)**從輸入流中讀取一行放到s所指向的緩衝區,直到遇到終止符或EOF;
**puts(char *s)**把字串s和尾隨的一個換行符輸出。
**scanf()**從標準輸入流中讀取輸入
**printf()**把輸出寫到標準輸出流中

#include <stdio.h>
int main( ) {
 
   char str[100];
   int i;
 
   printf( "Enter a value :");
   scanf("%s %d", str, &i);
 
   printf( "\nYou entered: %s %d ", str, i);
   printf("\n");
   return 0;
}

結果:

Enter a value :run 123

You entered: run 123 

另外,scanf()遇到空格會停止讀取,i love you 會被認為是三個字串。