C語言中的庫函數――我們編寫C語言程序時要寫許多代碼,這些代碼是用基本程序語句如運算符、表達式、幾種語句結構來組成。這些語句組成了多個不同的函數,由多個函數組成一個完整的程序。實際上如果程序中的語句都要由自己來寫的話,那么工作量是很大的了。并且有一些完成基本任務的函數如輸入輸出函數是經常需要使用的。這樣的一些常用的完成基本任務的函數有許多已經由提供編譯程序的公司為我們寫好了。這些已經寫好的函數放在TC或者BC編譯器的文件中。所謂“庫函數”,就是存放“函數”的“倉庫”。在TC中,函數的“倉庫”在哪里呢?在TC的.\LIB目錄中。編寫程序的時候,如果我們需要使用某個庫函數,就要在這個程序開頭指明這庫函數存放在哪里,以便讓編譯程序到這個地方去找。這個指明庫函數路徑的語句稱為“包含”語句,寫做#include。完整的寫法是:
#include <stdio.h>
#include 是包含的意思,<stdio.h> 是指明要使用的庫函數在 stdio.h這個文件里面有說明。尖括號<>是必須要寫的。而實際上,編譯程序在stdio.h之個文件里根據庫函數名可以在.\LIB目錄下的LIB文件里找到相關的代碼,寫進程序里面去。使用不同的庫函數時要用不同的包含,關于怎樣使用#include,可以查看庫函數的幫助。
有了眾多的庫函數,給編寫程序帶來了很大的方便。就象做房子要用磚和瓦一樣。如果沒有磚和瓦,做房子自己要挖土燒磚,可想而知,那樣做房子的難度有多大。寫程序也是這樣,有了庫函數,在需要完成某些任務時,找到相應的庫函數調用一下就可以了,不需要自己一點一點的寫代碼。在學習編程的同時要多多了解一些庫函數的特點及用法,對編寫程序是有很大的好處的。
(在Windows下編寫程序,需要了解的“庫函數”就更多了,可以說不了解庫函數就不會編程。VC中用的是MFC,Win32中用的是API,它們都是函數庫)
先了解二個庫函數――1、scanf函數 /*格式化控制臺輸入函數*/
函數原型:int scanf(control_string....); /*看上去很復雜。沒關系,以后自然會明白的*/
使用例:
void main()
{
int a,b,c; /*定義了三個整型變量*/
scanf("%d%d",&a,&b); /*從鍵盤輸入二個整數到孌量a和b中*/
c=a+b; /*把變量a與b相加的和送給變量c*/
}
下面仔細講一下scanf函數各參數的用法:
可以看到在小括號里有二個%d,后面有二個變量a和b。二個%d的寫法為"%d%d",注意凡是這樣的符號都要寫在雙引號里面,而變量則寫在雙引號的外面并用逗號分隔。這個%d我們稱為格式化說明符,第一個%d用于說明第一個變量a,第二個%d用于說明第二個變量b,這樣的順序是一一對應的。%d格式符說明了后面輸入的變量值是整型數。
另外注意的是二個%d是靠在一起的 %d%d,凡是這樣的寫法,在輸入數時,對于二個數之間的分隔是用“空隔鍵”來實現的。如輸入30和50這二個數形式為 30 50 如果二個%d寫成%d,%d中間有一個逗號,那么在輸入數據時也一定要在輸入的數之間加上逗號,如 30,50。
再來看一下變量的寫法,可以看到在每一個變量名的前面都有一個&號,這個&號是取變量地址的意思,那么&a寫在一起就是變量a的地址,&b寫在一起就是變量b的地址。
上面的scanf函數的作用就是把從鍵盤上輸入的二個整數分別送到變量a和變量b的地址里面去。這個&號是非常重要,不要寫漏了。
scanf函數的格式說明符(格式說明符說明了下一步將讀的是什么類型的數據)
格式碼 | 含義 | |
%c | 讀一單字符 | |
%d | 讀一整數 | |
%i | 讀一個浮點數 | |
%e | 讀一個浮點數 | |
%f | 讀一個浮點數 | |
%g | 讀一個浮點數 | |
%o | 讀一個八進制數 | |
%s | 讀一字符串 | |
%x | 讀一十六進制數 | |
%p | 讀一指針 | |
%n | 讀一個指針收一個等于到目前為止輸入的字符數止的整數 | |
%u | 讀一無符號整數 | |
%[] | 掃描一字符集 |
格式碼 | 格式 |
%c | 單個字符 |
%d | 十進制數 |
%i | 十進制數 |
%e | 科學法表示 |
%E | 科學法表示 |
%f | 十進制浮點數 |
%g | 用%e或%f中較短的的一個(如果是%e,用小寫e) |
%G | 用%e或%f中較短的的一個(如果是%E,用大寫E) |
%o | 以八進制形式輸出 |
%s | 字符串 |
%u | 無符號十進制數 |
%x | 十六進制數(小寫) |
%X | 十六進制數(大寫) |
%p | 顯示一個指針 |
%n | 相關變量是整型指針,它所指處存放至今要寫入字符的總數 |
%% | 打印一個%號 |
printf函數使用例:
1)char ss="abcdefghijk"; printf("%s",ss); /*輸出一個字符串,屏幕上顯示"abcdefghijk"*/
2)unsigned int a=65535; printf("%u",a); /*以十六進制形式輸出一個無符號數,顯示為ffff*/
3)int a=123,b=456,c=687; printf("%d\t%d\n%d",a,b,c);
輸出形式為:
123 456 /*'\t'是一個制表符,所以要移動一個制表位這么多空格數*/
687 /*'\n'是換行轉義符,在前面字符常量里講過。所以要換一行再輸出687*/