字符串(character string)是一個或多個字符的序列。好比:「i am a teacher!」 注意:雙引號不是字符串的一部分,它的做用是告知編譯器它包含起來的內容是字符串。對比單引號用於標識單個字符。數組
C語言當中,沒有專門存儲字符串的變量類型,字符串都被存儲在char類型的數組當中(數組由聯繫的存儲單元組成,同類型數據元素的有序序列)且使用空字符「\0」來標識字符串的結束。詳細以下圖:函數
注意:字符串和字符是不一樣的。好比:字符串常量「A」和字符常量‘A’它們的區別在於‘A’是基本類型(char),"A"是派生類型(char 數組)。另外區別「A」其實是由兩個字符組成的:‘A’+控制符。ui
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; }
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類型值之間的差值 |
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()函數用來輸入數據,由於鍵盤輸入都是文本(字母,數字,標點符號)。好比我要輸入整數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 |
若是咱們不但願預先定義字段寬度,但願經過程序來指定。那麼咱們可使用*來代替字段寬度,可是仍是須要使用一個參數來告訴函數具體的字段寬度是多少。舉例以下:
#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; }