這篇文章是本人看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)轉換說明及其列印的輸出結果
常用:%s 字元串
%x 十六進制記數法
%c 字元
%hu代表以 unsigned short格式輸出整數
(2)使用printf ()
printf("格式字元串,待列印項1,待列印項2,…)列印項可以是變量、常量,甚至要計算的表達式
列印%符号的解決辦法,使用兩個%%
(3) printf()的轉換說明修飾符
在%和轉換字元之間插入修飾符可修飾基本的轉換說明。如果要插入多個字元,其書寫順序應該與表4.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的傳回類型,這被稱為底層類型。
例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章的程式設計練習會放在下一章裡面