C語言的字符串不是基本類型,而是字符序列懊亡,可以把字符串看成一個(gè)以'\0'結(jié)尾的字符數(shù)組。'\0'其實(shí)是一種特殊字符乎串,其數(shù)值為0店枣。
一速警、示例
先看一個(gè)示例:
#include <stdio.h>
#include <string.h>
#define STIP "127.0.0.1"
int main(void)
{
char name[40];
int length;
int size_of;
int age;
printf("please input your name.\n");
scanf("%s", name);
length = strlen(name);
size_of = sizeof name;
printf("hi %s, your name's length is %d and it's size of is %d\n", name, length, size_of);
printf("please input your age.\n");
scanf("%d", &age);
printf("yes, %s, your age is %d, thanks for your input.\n", name, age);
printf("now, the #define string is %s.\n", STIP);
return 1;
}
這個(gè)程序可能會(huì)輸出以下結(jié)果
please input your name.
zhangfb
hi zhangfb, your name's length is 7 and it's size of is 40
please input your age.
17
yes, zhangfb, your age is 17, thanks for your input.
now, the #define string is 127.0.0.1.
我們有幾點(diǎn)需要注意
1、字符串是使用字符數(shù)組來表示的鸯两;
2闷旧、輸入字符串,跟輸入數(shù)字不一樣钧唐,不需要加入&符號(hào)忙灼,因?yàn)樽址拿Q代表的是其所在字符數(shù)組首個(gè)元素的地址,且字符串的打印需要使用%s钝侠;
3该园、使用strlen函數(shù)返回的是字符串的長度(除'\0'之外的字符個(gè)數(shù)),而使用sizeof關(guān)鍵字返回的則是存儲(chǔ)字符串的長度帅韧;
4里初、#define STIP "127.0.0.1"的定義,我們稱之為宏定義忽舟,代碼中STIP地方會(huì)被"127.0.0.1"替換双妨,所以在STIP之后不能加“=”,如果加了叮阅,則會(huì)連”=“一并納入替換刁品;
5、strlen函數(shù)需要使用string.h中的聲明浩姥;
6挑随、雙引號(hào)并不是字符串的一部分,它只是告知編譯器其中包含了一個(gè)字符串及刻。
二镀裤、常量與預(yù)處理器
1竞阐、常量
所謂常量缴饭,就是不可變的量。我們?cè)谑裁磿r(shí)候或?yàn)槭裁匆褂贸A柯嬗ǎ颗e例來說颗搂,我們根據(jù)圓直接徑計(jì)算周長,可以表示如下:
perimeter = 3.14159 * diameter;
但是如果我們用另一種方式來表達(dá)
pi = 3.14159;
perimeter = pi * diameter;
它帶來的好處主要有兩點(diǎn):1幕垦、一個(gè)名字比一個(gè)數(shù)字表達(dá)更多的意思丢氢;2、當(dāng)常量被程序多次引用的時(shí)候先改,如果要修改其值疚察,只需修改一處。這就是為什么我們要使用常量的原因仇奶。
2貌嫡、預(yù)處理器定義常量
C的預(yù)處理器除了使用#include <頭文件.h>之外,還可以定義常量。
#define TAXRATE 0.015
#define TAXRATE1=0.015 // 這樣寫是不被推薦的岛抄,雖然運(yùn)氣好時(shí)不會(huì)出現(xiàn)錯(cuò)誤别惦。
當(dāng)真實(shí)編譯程序的時(shí)候,值TAXRATE出現(xiàn)的地方都會(huì)被0.015所替換夫椭。尤其需要注意的時(shí)候掸掸,使用預(yù)處理器定義常量的時(shí)候,中間不能加“=”號(hào)蹭秋。至于TAXRATE全部是大寫字母扰付,只是一種約定或傳統(tǒng),即使你使用taxrate仁讨,仍然不會(huì)出現(xiàn)任何功能和語法上的錯(cuò)誤悯周。在其他一些項(xiàng)目中,可能會(huì)約定陪竿,常量需要命名成以c_或k_開頭禽翼。但是更常用的卻是常量命名成大寫。
3族跛、const修飾符
第二種定義常量的方法是使用const修飾符闰挡,即:
const int MONTHS = 12; // const修飾的變量,其實(shí)就是常量
4礁哄、系統(tǒng)常量
除了可以自己定義常量长酗,系統(tǒng)本身也帶了很多常量。例如桐绒,limits.h和float.h就有很多常量《崞ⅲ現(xiàn)簡單舉例如下:
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("max int is %d\n", INT_MAX);
printf("min int is %d\n", INT_MIN);
return 1;
}
輸出如下:
max int is 2147483647
min int is -2147483648
三、printf()和scanf()
這兩個(gè)函數(shù)的引入茉继,帶來的直接好處是交互更友好和有趣咧叭,不再是枯燥不變的程式了。在整個(gè)計(jì)算機(jī)中烁竭,IO的引入可謂是一種偉大的進(jìn)步菲茬。我們?nèi)粘|c(diǎn)點(diǎn)滴滴記錄,都是先由自身進(jìn)行輸入派撕,再由計(jì)算機(jī)進(jìn)行處理婉弹,并輸出到緩存、磁盤或網(wǎng)絡(luò)etc终吼。盡管其對(duì)外表現(xiàn)不同镀赌,但其工作方式卻是相同的,只是流向不同而已际跪。在C語言中商佛,他們的函數(shù)聲明也是大同小異蛙粘,都是由一個(gè)控制字符串,外加可變參數(shù)列表組成威彰。
1出牧、printf()函數(shù)
使用此函數(shù)打印輸出的指令,取決于實(shí)際的值類型歇盼。比如打印int類型變量使用%d舔痕,打印字符使用%c,打印字符串使用%s豹缀。這些符號(hào)被稱為轉(zhuǎn)換說明伯复。因?yàn)檎鎸?shí)的轉(zhuǎn)換很復(fù)雜,類型也很多邢笙,不管是作為備忘啸如,還是作為增強(qiáng)記憶,都有必要梳理整理出來氮惯,現(xiàn)羅列如下表叮雳。
轉(zhuǎn)換說明 | 輸出 |
---|---|
%a | 浮點(diǎn)數(shù)十六進(jìn)制計(jì)數(shù)法(小寫) |
%A | 浮點(diǎn)數(shù)十六進(jìn)制計(jì)數(shù)法(大寫) |
%c | 字符 |
%d | 有符號(hào)十進(jìn)制數(shù) |
%e | 浮點(diǎn)數(shù),e計(jì)數(shù)法(小寫) |
%E | 浮點(diǎn)數(shù)妇汗,E計(jì)數(shù)法(大寫) |
%f | 浮點(diǎn)數(shù)帘不,十進(jìn)制計(jì)數(shù)法 |
%g | 根據(jù)值的不同,自動(dòng)選擇%e杨箭、%f輸出寞焙,%e輸出是在指數(shù)小于-4或大于精度時(shí)使用 |
%G | 同上,只是使用大寫方式 |
%i | 有符號(hào)十進(jìn)制數(shù)(同%d) |
%o | 無符號(hào)八進(jìn)制整數(shù) |
%p | 指針 |
%s | 字符串 |
%u | 無符號(hào)十進(jìn)制數(shù) |
%x | 使用十六進(jìn)制數(shù)字0-f的無符號(hào)整數(shù) |
%X | 同上互婿,只是字母為大寫 |
%% | 打印一個(gè)百分號(hào) |
另外捣郊,我們可以在%和轉(zhuǎn)換說明字符之間加入修飾符加以修改,現(xiàn)羅列部分慈参。
標(biāo)記 | 意義 |
---|---|
- | 項(xiàng)目左對(duì)齊呛牲,例如:%-20s |
+ | 有符號(hào)的值若為正,則顯示帶加號(hào)的符號(hào)懂牧;若為負(fù)侈净,則顯示帶減號(hào)的符號(hào),例如:%+6.2f |
(空格) | 有符號(hào)的值若為正僧凤,則顯示空格;若為負(fù)元扔,則顯示帶減號(hào)的符號(hào)躯保,例如:%+6.2f |
# | 使用轉(zhuǎn)換說明的可選形式。若為%o形式澎语,則以0開始途事;若為%x或%X開始验懊,則以0x或0X開始。對(duì)于所有浮點(diǎn)形式尸变,#保證了即使不跟任何數(shù)字义图,也打印一個(gè)小數(shù)點(diǎn)字符。對(duì)于%g和%G格式召烂,它防止尾隨0被刪除 |
0 | 對(duì)于所有數(shù)字格式碱工,用前導(dǎo)零而不是用空格填充字段寬度。若出現(xiàn)-標(biāo)記或指定了精度則忽略該標(biāo)記奏夫。 |