天天看點

C Primer Plus 第4章 字元串和格式化輸入/輸出

這篇文章是本人看C Primer Plus 第4章 字元串和格式化輸入/輸出的筆記内容,希望對你有所幫助。

本章知識點:

1、輸入和輸出 printf() scanf()

2、C預處理器指令

文章目錄

    • 一、前導程式
      • 1.用C預處理器把字元常量DENSITY定義為62.4
      • 2.strlen()擷取字元串的長度
      • 3. char name[40]用數組儲存字元串。該數組占用記憶體中40個連續的位元組,每個位元組儲存一個字元值。
      • 4.使用%s來說明來處理字元串的輸入和輸出。
    • 二、字元串簡介
      • 1.char和null
      • 2.使用字元串
      • 3.Strlen函數
    • 三、常量和C預處理器
      • 1.const關鍵字
      • 2.明示常量
    • 四、 printf ()和scanf ()
      • 1.printf ()
        • (1)轉換說明及其列印的輸出結果
        • (2)使用printf ()
        • (3) printf()的轉換說明修飾符
        • (4)轉換說明的意義

提示:以下是本篇文章正文内容

一、前導程式

<talkback.c程式>

1.用C預處理器把字元常量DENSITY定義為62.4

2.strlen()擷取字元串的長度

letters=strlen(name);
           

3. char name[40]用數組儲存字元串。該數組占用記憶體中40個連續的位元組,每個位元組儲存一個字元值。

4.使用%s來說明來處理字元串的輸入和輸出。

二、字元串簡介

1.char和null

(1)注意""不是字元串的一部分

(2) 必須建立一個數組,把字元串中的字元逐個放入數組,還有記得在末尾加上一個\0。比如:talkback.c程式程式中name[40]有40個存儲單元的字元串,隻能儲存39個字元,剩下一個位元組留給空字元。

2.使用字元串

(1) %s告訴printf()列印一個字元串,根據%s轉換說明,scanf()隻會讀取字元串的一個單詞,遇到(空格、制表符或換行符)時就不再讀取輸入。

(2)字元串"x"和字元’x’

"x"由’x’和\0組成

3.Strlen函數

(1)string.h頭檔案中包含了strlen()函數和其他一些與字元串相關的函數。

(2) 隻有11個單元用來儲存Serendipity,sizeof 運算符報告,name 數組有40個存儲單元。但是,隻有前11個單元用來儲存Serendipity,是以strlen()得出的結果是11。(運算符給出的數更大,它把字元串末尾不可見的空字元也計算在内 )

(3)sizeof 運算符,以位元組為機關給出對象的大小。

  strlen() 函數,給出字元串中的字元長度。

sizeof 6.28 可以不用括号

三、常量和C預處理器

1.第2章中介紹了預處理如何使用#include包含其他檔案的資訊,預處理器也可以定義常量

句末沒有分号;

2.#define 指令還可以定義字元和字元串常量。前者單引号,後者雙引号

符号常量名後面的内容被用來替換符号常量

3.符号常量的命名規則與變量相同。可以使用大小寫字母、數字、下劃線字元,首字母不能為數字。

這裡替換TOES的是=20

1.const關鍵字

用于限定一個變量為隻讀

const 用起來比 #define更靈活。

2.明示常量

C頭檔案limits.h(整型限制)和float.h(浮點型限制)分别提供整數類型和浮點類型大小限制相關的詳細資訊

四、 printf ()和scanf ()

1.printf ()

(1)轉換說明及其列印的輸出結果

C Primer Plus 第4章 字元串和格式化輸入/輸出

常用:%s 字元串

%x 十六進制記數法

%c 字元

%hu代表以 unsigned short格式輸出整數

(2)使用printf ()

printf("格式字元串,待列印項1,待列印項2,…)列印項可以是變量、常量,甚至要計算的表達式

列印%符号的解決辦法,使用兩個%%

(3) printf()的轉換說明修飾符

在%和轉換字元之間插入修飾符可修飾基本的轉換說明。如果要插入多個字元,其書寫順序應該與表4.4中列出的順序相同。

C Primer Plus 第4章 字元串和格式化輸入/輸出

注意 類型可移植性

  sizeof 運算符以位元組為機關傳回類型或值的大小。 這應該是某種形式的整數, 但是标準隻規定了該值是無符号整數。 在不同的實作中, 它可以是unsigned int、 unsigned long甚至是unsigned long long。

  是以,如果要用printf()函數顯示sizeof表達式, 根據不同系統, 可能使用%u、 %lu或%llu。 這意味着要查找你目前系統的用法, 如果把程式移植到不同的系統還要進行修改。

   C提供了可移植性更好的類型。 首先, stddef.h頭檔案(在包含stdio.h頭檔案時已包含其中) 把size_t定義成系統使用sizeof傳回的類型, 這被稱為底層類型 。

  其次, printf()使用z修飾符表示列印相應的類型。 同樣, C還定義了ptrdiff_t類型和t修飾符來表示系統使用的兩個位址內插補點的底層有符号整數類型。

當size_t定義為系統使用sizeof的傳回類型,這被稱為底層類型。

C Primer Plus 第4章 字元串和格式化輸入/輸出

例1

#include <stdio.h>
#define PAGES 959
int main(void)
{
    printf("*%d*\n", PAGES);
    printf("*%2d*\n", PAGES);
    printf("*%10d*\n", PAGES);
    printf("*%-10d*\n", PAGES);

    return 0;
}
           

輸出

*959*
*959*
*       959*
*959       *
           
  • %2d輸出結果應該是2個字段寬度,待列印的整數有3位數字,字段寬度自動擴大以符合整數的長度
  • "-"标記說明列印的數字位于字段的左側

例2

#include <stdio.h>

int main(void)
{
    const double RENT = 3852.99;  

    printf("*%f*\n", RENT);
    printf("*%e*\n", RENT);
    printf("*%4.2f*\n", RENT);
    printf("*%3.1f*\n", RENT);
    printf("*%10.3f*\n", RENT);
    printf("*%10.3E*\n", RENT);
    printf("*%+4.2f*\n", RENT);
    printf("*%010.2f*\n", RENT);

    return 0;
}
           

輸出

*3852.990000*
*3.852990e+03*
*3852.99*
*3853.0*
*  3852.990*
* 3.853E+03*
*+3852.99*
*0003852.99*
           
  • %e 預設情況下,編譯器在小數點的左側列印1個數字,在小數點的右側列印6個數字。
  • 0 标記,使列印的值前面以0填充以滿足字段要求。%010.2f 的第1個0是标記,句點(.)之前、标記之後的數字(本例為10)是指定的字段寬度。

(4)轉換說明的意義

轉換說明是翻譯說明

  • 轉換不比對

    lname與fname是數組,在scanf()時無需加&符号

接下來一部分會慢慢補充釋出,敬請期待,第4章的程式設計練習會放在下一章裡面

繼續閱讀