C語言學(xué)習(xí)雜記(3)—字符串格式化輸入輸出

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)記奏夫。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怕篷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子酗昼,更是在濱河造成了極大的恐慌廊谓,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麻削,死亡現(xiàn)場離奇詭異蒸痹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)呛哟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門电抚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竖共,你說我怎么就攤上這事蝙叛。” “怎么了公给?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵借帘,是天一觀的道長。 經(jīng)常有香客問我淌铐,道長肺然,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任腿准,我火速辦了婚禮际起,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吐葱。我一直安慰自己街望,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布弟跑。 她就那樣靜靜地躺著灾前,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孟辑。 梳的紋絲不亂的頭發(fā)上哎甲,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天蔫敲,我揣著相機(jī)與錄音,去河邊找鬼炭玫。 笑死奈嘿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吞加。 我是一名探鬼主播裙犹,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼榴鼎!你這毒婦竟也來了伯诬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤巫财,失蹤者是張志新(化名)和其女友劉穎盗似,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體平项,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赫舒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闽瓢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片接癌。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扣讼,靈堂內(nèi)的尸體忽然破棺而出缺猛,到底是詐尸還是另有隱情,我是刑警寧澤椭符,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布荔燎,位于F島的核電站,受9級(jí)特大地震影響销钝,放射性物質(zhì)發(fā)生泄漏有咨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一蒸健、第九天 我趴在偏房一處隱蔽的房頂上張望座享。 院中可真熱鬧,春花似錦似忧、人聲如沸渣叛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诗箍。三九已至,卻和暖如春挽唉,著一層夾襖步出監(jiān)牢的瞬間滤祖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工瓶籽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匠童,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓塑顺,卻偏偏與公主長得像汤求,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子严拒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容