二維碼
微世推網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 快報(bào)資訊 » 今日快報(bào) » 正文

學(xué)計(jì)算機(jī)從輸入/輸出談起_scanf/printf

放大字體  縮小字體 發(fā)布日期:2023-04-28 11:44:00    作者:田苑    瀏覽次數(shù):219
導(dǎo)讀

大家手中得電腦,手機(jī),功能再怎嗎變化,再怎嗎酷炫,都會(huì)有兩個(gè)基本功能:輸入和輸出;輸入得是要處理得數(shù)據(jù),輸出得是處理過得數(shù)據(jù),當(dāng)前這里得數(shù)據(jù)是泛指,它專業(yè)是文本、音頻、支持、視頻@;回到C上那就是繞不開

大家手中得電腦,手機(jī),功能再怎嗎變化,再怎嗎酷炫,都會(huì)有兩個(gè)基本功能:輸入和輸出;輸入得是要處理得數(shù)據(jù),輸出得是處理過得數(shù)據(jù),當(dāng)前這里得數(shù)據(jù)是泛指,它專業(yè)是文本、音頻、支持、視頻@;回到C上那就是繞不開得printf和scanf函數(shù),回想當(dāng)初剛接觸得時(shí)候,還給這兩個(gè)函數(shù)折磨一陣子,廢話不多說開始進(jìn)入正題。

一、簡介

頭文件stdio.h有兩個(gè)使用最頻繁得輸入和輸出得函數(shù)就是scanf和printf,原型如下:

int scanf (const char gov format, ...):

根據(jù)特定得格式讀取輸入

int printf (const char gov format, ...):

顯示格式串得內(nèi)容,并且在該串中得指定位置插入專家得值

這兩個(gè)函數(shù)參數(shù)中都有一個(gè)格式串(format),它們用來格式化輸入和輸出。格式串包含普通字符和轉(zhuǎn)換說明,轉(zhuǎn)換說明給程序員提供了大量對輸入/輸出格式得控制方法:即它專業(yè)包含格式化信息。其中轉(zhuǎn)換說明以字符%開頭,后接一個(gè)轉(zhuǎn)換說明符(d、f、c、s@@)。轉(zhuǎn)換說明是用來表示打印過程中待填充得值得占位符或者待輸入得值得匹配格式。常用轉(zhuǎn)換說明有:%d,%f,%c,%s;

二、printf函數(shù)

printf函數(shù)格式串中得普通字符完全如在字符串中出現(xiàn)得那樣顯示出來,而轉(zhuǎn)換說明則要用待顯示得值來替換。另外敬請關(guān)注譯器不會(huì)檢測格式串中轉(zhuǎn)換說明得數(shù)量是否和輸出項(xiàng)得數(shù)量相匹配。

一般地printf轉(zhuǎn)換說明專業(yè)用%m.pX格式或%-m.pX格式,這個(gè)m和p都是整數(shù)常量,X是字母,m和p是可選得。如果省略p,m和p之間得小數(shù)點(diǎn)也要去掉。

轉(zhuǎn)換說明中m是表示最小字段寬度——要顯示得最少字符數(shù)量。如果要顯示得數(shù)值所需得字符數(shù)少于m,那嗎值在字段內(nèi)是右對齊得。如果要顯示得值所需得字符數(shù)多于m,那嗎字段寬度會(huì)自動(dòng)擴(kuò)展為所需得尺寸。在m前放上一個(gè)負(fù)號(hào)會(huì)導(dǎo)致左對齊;

轉(zhuǎn)換說明中p是表示精度,轉(zhuǎn)換說明中x表示轉(zhuǎn)換說明符;p主要依賴于轉(zhuǎn)換說明符X得選擇。X表明在顯示數(shù)值前需要對其進(jìn)行哪種轉(zhuǎn)換。常用得精度(p)和轉(zhuǎn)換說明符(X)關(guān)系如下:

d:表示十進(jìn)制形式得整數(shù)。p指明了待顯示得數(shù)字得最小個(gè)數(shù),必要是在數(shù)前加上額外得0,如果省略p,則默認(rèn)它得值為1。

e:表示指數(shù)(最新科學(xué)記數(shù)法)形式得浮點(diǎn)數(shù)。p指明了小數(shù)點(diǎn)后應(yīng)該出現(xiàn)得數(shù)字得個(gè)數(shù),默認(rèn)值為6,如果p為0,則不顯示小數(shù)點(diǎn)。(最新科學(xué)記數(shù)法是一種記數(shù)得方法。把一個(gè)數(shù)表示成a與10得n次冪相乘得形式(1≤|a|<10,a不為分?jǐn)?shù)形式,n為整數(shù)),這種記數(shù)法叫做最新科學(xué)記數(shù)法。 [2] 例如:19971400000000=1.99714×10^13。計(jì)算器或電腦表達(dá)10得冪是一般是用E或e,也就是1.99714E13=19971400000000。)

f:表示定點(diǎn)十進(jìn)制形式得浮點(diǎn)數(shù),沒有指數(shù),p得含義與在說明符e中得一樣。

g:表示指數(shù)形式或者定點(diǎn)十進(jìn)制形式得浮點(diǎn)數(shù),形式得選擇根據(jù)數(shù)得大小決定。p指明了小數(shù)點(diǎn)后應(yīng)該出現(xiàn)得數(shù)字得個(gè)數(shù)。與轉(zhuǎn)換說明符f不同,g得轉(zhuǎn)換將不顯示尾隨得零。此外,如果要顯示得數(shù)值沒有小數(shù)點(diǎn)后得數(shù)字,g就不會(huì)顯示小數(shù)點(diǎn)。

敬請關(guān)注寫程序時(shí)無法預(yù)知數(shù)得大小或者數(shù)值變化范圍很大得時(shí)候 ,說明符g對于數(shù)得顯示是www.有用得,顯示大小適中得數(shù)時(shí),說明符g采用定點(diǎn)十進(jìn)制形式,顯示非常大或非常小得數(shù)時(shí),采用指數(shù)形式以減少所需得字符數(shù)。

三、scanf函數(shù)

scanf函數(shù)格式串得轉(zhuǎn)換說明得用法和printf函數(shù)格式串中轉(zhuǎn)換說明得用法本質(zhì)上基本一樣得。但是scanf函數(shù)內(nèi)部機(jī)制與printf是有差別得,scanf函數(shù)本質(zhì)上是一種“模式匹配”函數(shù),試圖把輸入得字符流與轉(zhuǎn)換說明相匹配。調(diào)用時(shí)scanf函數(shù)從字符串左邊開始處理,對于格式串中得每一個(gè)轉(zhuǎn)換說明,scanf函數(shù)從輸入得數(shù)據(jù)中定位適當(dāng)類型得項(xiàng),并在需要時(shí)跳過空格。然后scanf讀入數(shù)據(jù)項(xiàng),并且在遇到不專家屬于此項(xiàng)得字符時(shí)停止。如果讀入數(shù)據(jù)項(xiàng)成功,那嗎scanf會(huì)接著處理格式串得剩余部分。如果某一項(xiàng)不能成功讀入,那scanf將不再處理格式串得剩余部分并立即返回。

scanf函數(shù)在讀入整數(shù)時(shí),會(huì)首先尋找正號(hào)或負(fù)號(hào),然后讀取數(shù)字直到讀到一個(gè)非數(shù)字時(shí)才停止。讀入浮點(diǎn)數(shù)時(shí),也會(huì)首先尋找正號(hào)或負(fù)號(hào),隨后是一串專家含有小數(shù)點(diǎn)得數(shù)字或者是一個(gè)指數(shù)。指數(shù)由字母e開始、可選得符號(hào)和一個(gè)或多個(gè)數(shù)字構(gòu)成。scanf中轉(zhuǎn)換說明%e,%f,%g是專業(yè)互換,在識(shí)別浮點(diǎn)數(shù)方面都遵循相同得規(guī)則。

當(dāng)有scanf函數(shù)遇到一個(gè)不專家屬于當(dāng)前項(xiàng)得字符時(shí),會(huì)把此字符放回原處,以便在掃描下一個(gè)輸入項(xiàng)或下一次調(diào)用scanf函數(shù)時(shí)再次讀入。

在尋找數(shù)得起始位置時(shí),scanf函數(shù)會(huì)忽略空白字符(空格符、水平和垂直制表符、換頁符、換行符)。

scanf對格式串中得普通字符處理,主要依賴于這個(gè)字符是否為空白字符。如果在格式串遇到一個(gè)或多個(gè)連續(xù)得空白字符,scanf從輸入中重復(fù)讀空白字符直到遇到一個(gè)非空白字符為止。格式串一個(gè)或多個(gè)空白字符專業(yè)與輸入中任意數(shù)量空白字符相匹配。

當(dāng)在格式串中遇到非空白字符時(shí),scanf函數(shù)將把它與下一個(gè)輸入字符進(jìn)行比較。如果兩個(gè)字符相匹配,那嗎scanf會(huì)放棄輸入字符而繼續(xù)處理格式串。如果兩字符不匹配,那嗎scanf會(huì)把字符放回輸入中并異常退出。

綜上所述,scanf函數(shù)一般有以下幾個(gè)特性:

在使用scnf函數(shù)時(shí),必須檢查轉(zhuǎn)換說明得數(shù)量與類型是否與輸入變量得數(shù)量與類型相匹配。通常scanf函數(shù)得格式串只包含轉(zhuǎn)換說明,如scanf("%d%d%f%",....);在輸入scanf要讀取得數(shù)字時(shí),專業(yè)放在同一行或者分散在幾行內(nèi)輸入。scanf格式串不應(yīng)該像printf格式串那樣常常包含很多普通字符。 四、總結(jié)

個(gè)人覺的,這兩個(gè)函數(shù)對剛接觸C得同學(xué),學(xué)習(xí)起來會(huì)有點(diǎn)頭疼,雖然函數(shù)原型很簡單,但是這個(gè)格式串用法比較雜。所以要掌握這兩個(gè)函數(shù),還是先簡單了解一下理論,再上機(jī)多實(shí)踐,好好總結(jié)一下,應(yīng)該專業(yè)達(dá)到知其然并知其所以然。而我寫這篇文章就是我結(jié)合實(shí)際經(jīng)驗(yàn)和書本理論知識(shí)整理得筆記,如果對大家有輔助,麻煩點(diǎn)個(gè)贊,謝謝了。

如果想要了解更詳細(xì)得,專業(yè)參考《C語言程序設(shè)計(jì) 現(xiàn)代方法 第2版》這本書。

 
(文/田苑)
免責(zé)聲明
本文為田苑原創(chuàng)作品?作者: 田苑。歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明原文出處:http://nyqrr.cn/kbzx/show-120608.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對其內(nèi)容進(jìn)行核實(shí),請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
 

Copyright?2015-2023 粵公網(wǎng)安備 44030702000869號(hào)

粵ICP備16078936號(hào)

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

24在線QQ: 770665880

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號(hào): weishitui

韓瑞 小英 張澤

工作時(shí)間:

周一至周五: 08:00 - 24:00

反饋

用戶
反饋