字符串和格式化輸入輸出

一;字符串簡介

  字符串(character string)是一個或多個字符的序列。好比:「i am a teacher!」 注意:雙引號不是字符串的一部分,它的做用是告知編譯器它包含起來的內容是字符串。對比單引號用於標識單個字符。數組

二;char類型數組和null字符

  C語言當中,沒有專門存儲字符串的變量類型,字符串都被存儲在char類型的數組當中(數組由聯繫的存儲單元組成,同類型數據元素的有序序列)且使用空字符「\0」來標識字符串的結束。詳細以下圖:函數

注意:字符串和字符是不一樣的。好比:字符串常量「A」和字符常量‘A’它們的區別在於‘A’是基本類型(char),"A"是派生類型(char 數組)。另外區別「A」其實是由兩個字符組成的:‘A’+控制符。ui

三;常量和C預處理量

  3.1;符號常量(明示常量)是在編譯程序時,程序中全部的符號常量被替換爲定義的初始值,且不會被程序無心間改變值。同時也是方便往後程序的修改。(預編譯器可使用#include包含其餘文件的信息同時也能夠用來定義常量)spa

  3.2;定義符號常量格式:#define NAME value (詳細參考下面例子)3d

#include <stdio.h>
#define PI 3.14159     //定義一個PI字符常量
int main(void)
{
    float area, circum, radius;

    printf("What is the redius of your pizza?\n")
    scanf("%f",&radius);
    area = PI * radius * radius;   //使用字符常量,編譯過程當中自動轉換爲數值3.14159
    circum = 2.0 * PI * radius;
    printf("Your basic pizza parameters are as follows:\n");
    printf("circumference = %1.2f, area = %1.2f\n",circum,area);

    return 0;
}

四;connst限定符

  const關鍵字是C90標準新增的,做用是限定一個變量爲只讀。舉例:指針

const int a = 12;      //a變量在程序中不可更改成只讀。具體之後詳細講解:code

五;明示常量

  明示常量至關於符號常量。常見使用以下:blog

  頭文件limits.h包含明示常量以下:ci

明示常量 含義
CHAR_BIT char類型的位數
CHAR_MAX char類型的最大值
CHAR_MIN char類型的最小值
SCHAR_MAX signned char 類型的最大值
SCHAR_MIN signned char 類型的最小值
UCHAR_MAX unsigned char 類型的最大值
SHRT_MAX short類型的最大值
SHRT_MINN short類型的最小值
USHRT_MAX unsigned char 類型的最大值
INT_MAX

int類型的最大值字符串

INT_MIN int類型的最小值
UINT_MAX unsigned int 的最大值
LONG_MAX long類型的最大值
LONG_MIN long類型的最小值
ULONG_MAX unsigned long 類型的最大值
LLONG_MAX long long 類型的最大值
LLONG_MIN long long 類型的最小值
ULLONG_MAX unsigned long log 類型的最大值

  頭文件float.h包含明示常量以下:

明示常量 含義
FLT_MANT_DIG float類型的尾數位置
FLT_DIG float類型的最少有效數字位數(十進制)
FLT_MIN_10_EXP 帶所有有效數字的float類型的最小負指數(以10爲底)
FLT_MAX_10_EXP float類型的最大正指數(以10爲底)
FLT_MIN 保留所有精度的float類型最小正數
FLT_MAX float類型的最大正數
FLT_EPSILON 1.00和比1.00大的最小float類型值之間的差值

 

六;printf()函數

  6.1;printf()函數爲輸出函數,且和scanf()函數一塊兒稱之爲輸入/輸出函數。

  printf()函數格式爲:printf(格式字符串,待打印項目1,待打印項目2,。。。) 其中「格式字符串」是雙引號括起來的內容,使用「轉換說明」符號來指定「待打印項目」值代入的位置以及數據轉換可顯示的形式。「待打印項目」能夠是常量,變量,表達式。舉例:

#include <stdio.h>
#define PI 3.14159
int main(void)
{
    int number = 7;
    printf("The number is %d\n",number);   //%d佔位符,轉換說明:有符號的十進制整數

    return 0;
}

注意:格式字符串中的轉換說明必定要與後面的每一個項目匹配。

  6.2;轉換說明把以二進制格式存儲在計算機中的值轉換成一系列字符(字符串)以便於顯示。printf()函數常見轉換說明符號以下圖:

轉換說明 輸出
%a 浮點數,十六進制數和p計數法(C99/C11)
%A 浮點數,十六進制數和p計數法(C99/C11)
%c 單個字符
%d 有符號十進制整數
%e 浮點數,e計數法
%E 浮點數,e計數法
%f 浮點是,十進制計數法
%g 根據值的不一樣,自動選擇%f,%e,%e格式用於指數小於-4或者大於或等於精度時
%G 根據值的不一樣,自動選擇%f,%e,%e格式用於指數小於-4或者大於或等於精度時
%i 有符號實際值整數
%o 無符號八進制整數
%p 指針
%s 字符串
%u 無符號十進制整數
%x 無符號十進制整數,使用十六進制數0f
%X 無符號十進制整數,使用十六進制數0F
%% 打印一個百分號

  6.3;printf()轉換說明修飾符

    在%和轉換字符之間插入修飾符可修飾基本的轉換說明,好比:%4d 表示十進制整數位,保留4個最小字段寬度。以下表顯示基本使用修飾符:

修飾符 含義
標記 標記包含5種類,詳細查看下文標記表格。舉例:「%-10d」
數字

最小字段寬度

注意:若是該字段不能容納帶打印的數字或字符串,系統默認會使用更寬的字段。

舉例:「%4d」

.數字

精度

對於%e,%E,%f,轉換,表示小數點右邊數字的位數

對於%g,%G 表示有效數字最大的位數

%s 表示待打印字符的最大數量

整型轉換,表示待打印數字的最小位數

舉例:「%5.2f」打印一個浮點數,字段寬度5字符,其中小數點後面兩位數字

h

和整數轉換說明一塊兒使用,表示short int 或unnsigned short int 類型的值

舉例:「%hu」

hh

和整數轉換說明一塊兒使用,表示signed char 或者 unsigned char 類型的值

舉例:「%hhu」

j

和整型轉換說明一塊兒使用,表示inntmax_t或uintmax_t類型的值、

舉例:「%jd」

l

和整型轉換說明一塊兒使用,表示long int 或 unsigned long int 類型的值

舉例:「%ld」

ll

和整型轉換說明一塊兒使用,表示long long int 或 unsigned long long int 類型的值

舉例:「%lld」,"%8lld"

L

和浮點轉換說明一塊兒使用,表示long double 類型的值

舉例:「%Ld」,"%10.4Le"

t

和整型轉換說明一塊兒使用,表示ptrdiff_t類型的值。ptrdiff_t是兩個指針差值的類型

舉例:「%td」,"%19.3ti"

z

和整型轉換說明一塊兒使用,表示size_t 類型的值。size_t是sizeof返回的類型

舉例:「%zd」,"%12zd"

    printf()中的標記,詳細查看以下表格:

標記 含義
-

待打印項左對齊。即,從字段的左側開始打印該項

舉例:「%-20s」

+

有符號值爲正,則在值前面顯示加號;爲負,則在前面顯示減號

舉例:「%+6.3f」

空格

有符號值爲正,則在值前面顯示前導空格(不顯示任何符號);爲負。則在值前面顯示減號

+標記覆蓋一個空格

舉例:「%6.3f」

#

把結果轉換爲另外一種形式,若是是%o格式,則以0開始;若是是%x 或%X格式,則以0x 或0X開始;對於全部的浮點格式,#保證了即便後面沒有任何數字,也打印一個小數點符號。對於%g和%G格式,#防止結果後面的0被刪除。

舉例:「%#o」

0 對於數值格式,用前導0代替空格填充字段寬度。對於整數格式,若是出現-標記或指定精度,則忽略該標記

    使用修飾符和標記的實例:

  示例一;字段寬度在打印整數時效果。

#include <stdio.h>
#define PAGES 959
int main(void)
{
        printf("*%d*\n",PAGES);
        printf("*%2d*\n",PAGES); //字段寬度爲3位數字,規定輸出2個字段寬度。因此默認自動擴大以符合整數成都
        printf("*%10d*\n",PAGES);
        printf("*%-10d*\n",PAGES);

        return 0;
}

  運行結果如圖:

  示例二;浮點型修飾符組合

  。。。。。。

   7.4;printf()的返回值

    printf()返回值時返回打印字符的個數。

七;scanf()函數

  scanf()函數用來輸入數據,由於鍵盤輸入都是文本(字母,數字,標點符號)。好比我要輸入整數2019,就要輸入字符2,0,1,9 。可是計算機存儲的是數值而不是字符串,因此須要經過scanf()函數將字符依次轉換成數值。而printf()函數行爲相反。

  scanf()函數使用格式:scanf(「格式字符串」,指向變量指針)

  格式字符串:用來代表字符輸入流的目標數據類型

  指向變量指針:1;若是讀取基本變量類型的值,則變量名稱前加一個&。2;若是是字符串讀入字符數組,不要使用&

使用舉例:

#include <stdio.h>
int main(void)
{
        int age;
        float assets;
        char pet[30];

        printf("Enter your age, assets, and favorite pet.\n");
        scanf("%d %f",&age,&assets);
        scanf("%s",pet);
        printf("%d $%.2f %s\n",age,assets,pet);
        return 0;
}

演示結果:

  7.1;scanf()函數轉換說明以下表:

轉換說明 含義
%c 把輸入解釋成字符,包括空白
%d 把輸入解釋成有符號十進制整數
%e,%f,%g,%a 把輸入解釋成浮點數
%E,%F,%G,%A 把輸入解釋成浮點數
%i 把輸入解釋成有符號十進制整數
%o 把輸入解釋成有符號八進制整數
%p 把輸入解釋成指針(地址)
%s 把輸入解釋成字符串。從第一個非空白字符開始,到下個空白字符以前的全部字符都是輸入
%u 把輸入解釋成無符號十進制整數
%x,%X 把輸入解釋成有符號十六進制整數

  7.2;scanf()轉換說明中的修飾符以下表:

轉換說明 含義
* 抑制賦值,詳細查看下文「printf()和scanf()的*修飾符」
數字

最大字段寬度。輸入達到最大字段寬度處,或者第一次遇到空白字符中止

舉例:「%10s」

hh

把整數做爲signed char 或unsigned char 類型讀取

舉例:「%hhd」

ll

把整數做爲long long 或 unsigned long long 類型讀取

舉例:「%lld」

j

在整型轉換說明後面時,代表使用intmax_t 或uintmax_t類型

舉例:「%jd」

z

在整型轉換說明後面時,代表使用sizeof的返回類型

t 在整型轉換說明後面時,代表使用表示兩個指針差值的類型
h,l,L  

八;printf()和scanf()的*修飾符

  若是咱們不但願預先定義字段寬度,但願經過程序來指定。那麼咱們可使用*來代替字段寬度,可是仍是須要使用一個參數來告訴函數具體的字段寬度是多少。舉例以下:

#include <stdio.h>
int main(void)
{
    unsigned width, precision;
    int number = 256;
    double weight = 242.5;

    printf("Enter a field width:\n");
    scanf("%d",&width)
    printf("The number is :%*d:\n",width,number);
    printf("Now enter a width and a precision:\n");
    scanf("%d %d",&width,&precision);
    printf("weight = %*.*f\n",width,precision,weight); //"%*.*f"中兩個*分別被width,precision參數代替
    printf("Done!\n");

    return 0;
}
相關文章
相關標籤/搜索