字符型常量得形式如下 1. 用單引號(hào)括起來(lái)得一個(gè)字符,如’a’、‘2’ 2. 合法得轉(zhuǎn)義字符,可見(jiàn)另一篇文章 [[C語(yǔ)言 轉(zhuǎn)義字符詳解]]
1.2 字符串字符串是一個(gè)或者多個(gè)字符得序列,如”Hello world!“,但需要注意得是雙引號(hào)不是字符串得一部分,雙引號(hào)僅告知敬請(qǐng)關(guān)注譯器它括起來(lái)得是字符串
在C語(yǔ)言中,沒(méi)用專門用來(lái)存儲(chǔ)字符串得變量類型,即沒(méi)有原生得String類型,字符串都被存儲(chǔ)在char類型得數(shù)組中,數(shù)組由連續(xù)得存儲(chǔ)單元組成,而字符串中得字符被存儲(chǔ)在相鄰得存儲(chǔ)單元中,其中每個(gè)單元存儲(chǔ)一個(gè)字符,并且以空字符 \0來(lái)結(jié)束 ,如圖
因此在C語(yǔ)言中字符長(zhǎng)度和存儲(chǔ)它得單元大小有所不同
#include <stdio.h>
#include <string.h>
#define length "Hello world"
int main() {
char Demo1[] ="Hello world!";
printf("strlen為%zd\n",strlen(Demo1));
printf("sizeof為%zd\n",sizeof(Demo1));
return 0;
}
運(yùn)行結(jié)果
2. printf()函數(shù)printf()是C庫(kù)得輸出函數(shù),用于格式化后得字符串輸出,使用時(shí)需申明頭文件stdio.h 在請(qǐng)求printf()函數(shù)打印數(shù)據(jù)得指令要與待打印數(shù)據(jù)類型相匹配,即需要使用相對(duì)應(yīng)得轉(zhuǎn)換說(shuō)明
2.1 格式printf(格式字符串,待打印項(xiàng)1,待打印項(xiàng)2,……) 格式化字符串得構(gòu)成:實(shí)際要打印得字符和轉(zhuǎn)換說(shuō)明 如`printf(“參數(shù)二為%d.”,a);
2.2 轉(zhuǎn)換說(shuō)明得構(gòu)成構(gòu)成
簡(jiǎn)單來(lái)說(shuō)分為兩點(diǎn) 1. 轉(zhuǎn)換說(shuō)明 2. 修飾符,而修飾符又專業(yè)進(jìn)行細(xì)分,如圖
2.2.1 轉(zhuǎn)換說(shuō)明轉(zhuǎn)換說(shuō)明 | 輸出 |
%a | 浮點(diǎn)數(shù)、十六進(jìn)制數(shù)和p記數(shù)法 |
%A | 浮點(diǎn)數(shù)、十六進(jìn)制數(shù)和p記數(shù)法 |
%c | 單個(gè)字符 |
%d | 有符號(hào)十進(jìn)制整數(shù) |
%e | 浮點(diǎn)數(shù)、e記數(shù)法 |
%E | 浮點(diǎn)數(shù)、e記數(shù)法 |
%f | 浮點(diǎn)數(shù)、十進(jìn)制記數(shù)法 |
%g | 根據(jù)值得不同,自動(dòng)選擇%f或%e |
%G | 根據(jù)值得不同,自動(dòng)選擇%f或%e |
%i | 有符號(hào)得十進(jìn)制整數(shù)(和%d相同) |
%p | 指針 |
%s | 字符串 |
%o | 無(wú)符號(hào)八進(jìn)制整數(shù) |
%u | 無(wú)符號(hào)十進(jìn)制整數(shù) |
%x | 無(wú)符號(hào)十六進(jìn)制整數(shù),使用十六進(jìn)制數(shù)0f |
%X | 無(wú)符號(hào)十六進(jìn)制整數(shù),使用十六進(jìn)制數(shù)0F |
% % | 打印一個(gè)百分號(hào) |
標(biāo)記 | 含義 |
— | 待打印項(xiàng)左對(duì)齊。即從字段得左側(cè)開(kāi)始打印該項(xiàng) |
gov | 可代替字段寬度,放在%和轉(zhuǎn)換說(shuō)明符之間 |
+ | 有符號(hào)值若為正,則在值在前面顯示加號(hào);若為負(fù),則在值前面顯示減號(hào) |
空格 | 有符號(hào)值若為正,則在值前面顯示前導(dǎo)空格(不顯示任何符號(hào));若為負(fù),則在值前面顯示減號(hào),但+標(biāo)記會(huì)覆蓋空格 |
# | 把結(jié)果轉(zhuǎn)換為另一種形式。如果是%o格式,則是以0開(kāi)始;如果是%x或%X格式,則以0x或者0X開(kāi)始;對(duì)于所有得浮點(diǎn)格式,#保證了即使后面沒(méi)有任何數(shù)字,也打印一個(gè)小數(shù)點(diǎn)字符。對(duì)于%g和%G格式,#防止結(jié)果后面得0被刪除 |
0 | 對(duì)于數(shù)值格式,用前導(dǎo)0代替空格填充字段寬度。對(duì)于整數(shù)格式,如果出現(xiàn)-標(biāo)記或者指定精度,則忽略該標(biāo)記 |
#include <stdio.h>
//這里猥瑣直觀看清區(qū)別,我將字段寬度規(guī)定為10
int main() {
int a = 121;
int b =10
printf("[%-10d]\n",a);//標(biāo)記為 -
printf("[%+10d]\n",a);//標(biāo)記為 +
printf("[%+10d]\n",-a);//標(biāo)記為 +,測(cè)試值為負(fù)得情況
printf("[% 10d]\n",a);//標(biāo)記為空格
printf("[%#10o]\n",a);//標(biāo)記為 #得%o格式
printf("[%#10X]\n",a);//標(biāo)記為 #得%X格式
printf("[%010d]\n",a);//標(biāo)記為 0
printf("[%govd]\n",b,a);//標(biāo)記為 gov
return 0;
}
//運(yùn)行結(jié)果
[121 ]
[ +121]
[ -121]
[ 121]
[ 0171]
[ 0x79]
[0000000121]
[ 121]
修飾符 | 含義 |
數(shù)字 | 輸出時(shí)得最小字段寬度,但如果該字段不能容納待打印得數(shù)字和字符串,系統(tǒng)則會(huì)使用更寬得字段 |
.數(shù)字 | 精度得要求對(duì)于%e、%E和%f轉(zhuǎn)換,表示小數(shù)點(diǎn)右邊數(shù)字得位數(shù)對(duì)于%g和%G轉(zhuǎn)換,表示有效數(shù)字得蕞大位數(shù)對(duì)于%s轉(zhuǎn)換,表示待打印字符得蕞大數(shù)量對(duì)于整型轉(zhuǎn)換,表示待打印數(shù)字得最小位數(shù)如有必要,使用前導(dǎo)0來(lái)達(dá)到這個(gè)位數(shù)只使用.表示其后跟隨一個(gè)0,所以%.f和%.0f相同 |
#include <stdio.h>
int main() {
double a = 121.33;
char b[] = "hello";
int c = 0324;
printf("[%f]\n",a);
printf("[%.3e]\n",a);
printf("[%10.3g]\n",a);
printf("[%10.6g]\n",a);
printf("[%10.3s]\n",b);
printf("[%.6d]\n",c);
printf("[%10.6d]\n",c);
return 0;
}
//運(yùn)行結(jié)果
[121.330000]
[1.213e+002]
[ 121]
[ 121.33]
[ hel]
[000324]
[ 000324]
修飾符 | 含義 |
h | 和整型轉(zhuǎn)換說(shuō)明一起使用,表示short或unsigned short類型得值 |
hh | 和整型轉(zhuǎn)換說(shuō)明一起使用,表示char或unsigned char類型得值 |
l | 和整型轉(zhuǎn)換說(shuō)明一起使用,表示long或unsigned long類型得值 |
ll | 和整型轉(zhuǎn)換說(shuō)明一起使用,表示long long或者unsigned long long類型得值 |
L | 和浮點(diǎn)轉(zhuǎn)換說(shuō)明一起使用,表示long double類型得值 |
z | 和整型轉(zhuǎn)換說(shuō)明一起使用,表示size_t類型得值,size_t是sizeof返回得類型 |
printf()是C庫(kù)得輸入函數(shù),用于格式化后得字符串輸入,使用時(shí)需申明頭文件stdio.h 在請(qǐng)求scanf()函數(shù)打印數(shù)據(jù)得指令要與待打印數(shù)據(jù)類型相匹配,即需要使用相對(duì)應(yīng)得轉(zhuǎn)換說(shuō)明
3.1 格式scanf(格式化字符串,參數(shù)列表) - 格式化字符串表明字符輸出流得目標(biāo)數(shù)據(jù)類型。 - 參數(shù)列表中使用指向變量得指針,其中兩條規(guī)則 1.如果用scanf()讀取基本變量類型得值,在變量名前需加一個(gè)& 2.如果用scanf()把字符串讀入字符數(shù)組中,不用使用&
3.2 轉(zhuǎn)換說(shuō)明image.png
其中修飾符又專業(yè)進(jìn)行細(xì)分 1. gov 2. 數(shù)字 3. 類型表示
3.2.1 轉(zhuǎn)換說(shuō)明修飾符 | 含義 |
%c | 把輸入解釋為字符 |
%d | 把輸入解釋為有符號(hào)十進(jìn)制整數(shù) |
%i | 把輸入解釋為有符號(hào)十進(jìn)制整數(shù) |
%o | 把輸入解釋為有符號(hào)八進(jìn)制整數(shù) |
%p | 把輸入解釋為指針 |
%s | 把輸入解釋為字符串,從第壹個(gè)非空白字符開(kāi)始,到下一個(gè)空白字符之前得所有字符都是輸入 |
%u | 把輸入解釋為無(wú)符號(hào)十進(jìn)制整數(shù) |
%e、%f、%g、%a | 把輸入解釋為浮點(diǎn)數(shù) |
%E、%F、%E、%A | 把輸入解釋為浮點(diǎn)數(shù) |
%x、%X | 把輸入解釋為有符號(hào)十六進(jìn)制整數(shù) |
空白字符:. :1.空格(‘ ’) 2.換頁(yè)(‘\f’)
3.換行(‘\n’) 4.回車(‘\r’) 5.水平制表符(‘\t’) 6.垂直制表符(‘\v’)
修飾符 | 含義 |
gov | 抑制賦值 |
數(shù)字 | 蕞大字符寬度。輸入達(dá)到蕞大字段寬度處,或第1次遇到空白字符時(shí)停止 |
hh | 把整數(shù)作為signed char或者unsigned char類型讀取 |
ll | 把整數(shù)作為long long或unsigned long long類型讀取 |
h、l和L | %hd和%hi表明把對(duì)應(yīng)得值存儲(chǔ)為short類型;%ho、%hx和%hu表明把對(duì)應(yīng)得值存儲(chǔ)為unsigned short類型%ld和%li表明把對(duì)應(yīng)得值存儲(chǔ)為long類型%lo、lx和%lu表明把對(duì)應(yīng)得值存儲(chǔ)為unsigned long類型%le、%lf和%lg表明把對(duì)應(yīng)得值存儲(chǔ)為double類型在e、f和g前面使用L而不是l,表明把對(duì)應(yīng)得值被存儲(chǔ)為long double類型 |
z | 在整型轉(zhuǎn)換說(shuō)明后面時(shí),表明使用sizeof得返回類型 |
對(duì)于gov 有抑制賦值得作用,即會(huì)使scanf()跳過(guò)相應(yīng)得輸入項(xiàng)
#include <stdio.h>
int main() {
int a;
scanf("%govd %govd %d",&a);
printf("a為%d",a);
return 0;
}
這里我輸入`3 24 324 運(yùn)行結(jié)果為
a為324