动态

详情 返回 返回

printf()和scanf()的佔位符列舉——C語言 - 动态 详情

如樣例代碼printf("BMI = %f\n", 21.3),其中%f就是一個佔位符printf()函數的佔位符有許多種類,與c語言的數據類型相對應。以下列舉一些常見的。


佔位符 含義
%a 十六進制浮點數,字母輸出為小寫。
%A 十六進制浮點數,字母輸出為大寫。
%c 字符。//char
%d 十進制整數。// int
%e 使用科學計數法的浮點數,指數部分的e為小寫。
%E 使用科學計數法的浮點數,指數部分的E為大寫。
%i 整數,基本等同於%d。
%f 小數(包含float類型和double類型)。//float %f double %lf
%g 6個有效數字的浮點數。整數部分一旦超過6位,就會自動轉為科學計數法,指數部分的e為小寫。
%G 等同於%g,唯一的區別是指數部分的E為大寫。
%hd 十進制 short int 類型。
%ho 八進制 short int類型。
%hx 十六進制 short int類型。
%hu unsigned short int 類型。
%ld 十進制 long int 類型。
%lo 八進制long int 類型。
%lx 十六進制 long int 類型。
%lu unsigned long int 類型。
%lld 十進制long long int 類型。
%llo 八進制 long long int類型。
%llx 十六進制 long long int類型。
%llu unsigned long long int 類型。
%Le 科學計數法表示的long double類型浮點數。
%Lf long double類型浮點數。
%n 已輸出的字符串數量。該佔位符本身不輸出,只將值存儲在指定變量之中。
%o 八進制整數。
%p 指針(用來打印地址)。
%s 字符串。
%u 無符號整數(unsigned int)。
%x 十六進制整數。
%zd size_t類型。//sizeof操作符的返回值類型
%% 輸出一個百分號。

scanf()常用的佔位符如下,與printf()的佔位符基本一致。

佔位符 含義
%c 字符。
%d 整數。
%f float類型浮點數。
%lf double類型浮點數。
%Lf long double類型浮點數。
%s 字符串。
%[] 在方括號中指定一組匹配的字符(比如%[0-9]),遇到不在集合之中的字符,匹配將會停止。

值得注意的是,上面所有佔位符之中,除了%c以外,都會自動忽略起首的空白字符。%c不忽略空白字符,總是返回當前第一個字符,無論該字符是否為空格。

如果要強制跳過字符前的空白字符,可以寫成scanf(" %c",&ch),即%c前加上一個空格,表示跳過零個或多個空白字符。

下面要特別説一下佔位符%s ,它其實不能簡單地等同於字符串。它的規則是,從當前第一個非空白字符開始讀起,直到遇到空白字符(即空格、換行符、製表符等)為止。

因為%s不會包含空白字符,所以無法用來讀取多個單詞,除非多個%s一起使用。這也意味着,scanf()不適合讀取可能包含空格的字符串,比如書名或歌曲名。另外,scanf()遇到%s佔位符,會在字符串變量末尾存儲一個空字符\0

scanf()將字符串讀入字符數組時,不會檢測字符串是否超過了數組長度。所以,儲存字符串時, 很可能會超過數組的邊界,導致預想不到的結果。為了防止這種情況,使用%s佔位符時,應該指定讀入字符串的最長長度,即寫成%[m]s ,其中的[m]是一個整數,表示讀取字符串的最大長度,後面的字符將被丟棄。

#include <stdio.h>

int main() 
{
    char name[11];
    scanf("%10s", name);
    return 0;
}

上面示例中,name是一個長度為11的字符數組,scanf()的佔位符%10s表示最多讀取用户輸入的10個字符,後面的字符將被丟棄,這樣就不會有數組溢出的風險了。


正文完

user avatar wanshoujidezhuantou 头像 huizhudev 头像 tssc 头像 kukudejiqimao_bns3pe 头像 god23bin 头像 yunpan-plus 头像 georgegcs 头像 wuliaodeqie 头像 idiomeo 头像 morpheusdong 头像 junyidedalianmao 头像 xiaoyuindebuilder 头像
点赞 23 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.