C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证
1. 緩存區(qū)
#include大部分系統(tǒng)在用戶按下 Enter 鍵之前不會重復(fù)打印剛輸入的字符,這種輸入叫緩沖輸入。用戶輸入的字符被收集并存儲在緩沖區(qū)(buffer)。
- 把若干字符作為一個塊進(jìn)行傳輸比逐個發(fā)送更節(jié)約時間。
- 如果用戶打錯字符,可以通過鍵盤修正錯誤。
緩沖分為兩類:
- 完全緩沖指的是當(dāng)緩沖區(qū)被填滿時才刷新緩沖區(qū)(內(nèi)容發(fā)送至目的地),通常出現(xiàn)在文件輸入中。
- 行緩沖指的是在出現(xiàn)換行符時刷新緩沖區(qū),例如鍵盤輸入時按下Enter。
2. 結(jié)束鍵盤輸入
2.1. 文件、流和鍵盤輸入
文件(file)是存儲器中存儲信息的區(qū)域。
C有許多用于打開、讀取、寫入和關(guān)閉文件的庫函數(shù)。在較高層面上,C通過標(biāo)準(zhǔn)I/O包(standard I/O package)來處理文件,包括用于處理文件的標(biāo)準(zhǔn)模型和一套標(biāo)準(zhǔn)I/O函數(shù),以避免不同操作系統(tǒng)的差異。
C程序處理的是流(stream),而不是直接處理文件。流是一個實(shí)際輸入或輸出映射的理想化數(shù)據(jù)流。
stdin流表示鍵盤輸入,stdout流表示屏幕輸出。
2.2. 文件結(jié)尾
在文件末尾放一個特殊的字符標(biāo)記文件結(jié)尾。
在C中,getchar() 讀取文件檢測到文件結(jié)尾時返回 EOF(end of file),scanf() 函數(shù)也是。
EOF定義在stdio.h文件中,為-1。因?yàn)?1不對應(yīng)任何字符。
#include在鍵盤輸入時,不能只輸入字符EOF或-1,在PC上,按下 CTRL + Z。
3. 重定向和文件
設(shè)計(jì)能與鍵盤和屏幕互動的程序,通過不同的渠道重定向輸入至文件和從文件輸出,即把stdin流重新賦給文件。
重定向輸入讓程序使用文件而不是鍵盤來輸入,輸出至文件而不是屏幕。
3.1. 重定向輸入
echo_eof < word< 是重定向運(yùn)算符,該運(yùn)算符使words文件與stdin流相關(guān)聯(lián)。因?yàn)?C 把文件和 I/O 設(shè)備放在一個層面,所以這些就是現(xiàn)在的 I/O設(shè)備。
3.2. 重定向輸出
echo_eof > myword> 是重定向運(yùn)算符,創(chuàng)建了一個名為 mywords 的新文件。把 echo_eof 的輸出重定向至該文件中。 最后按 ctrl+Z 結(jié)束程序。
3.3. 組合重定向
. / echo_eof < mywords > savewords制作一個名為 savewords 的文件副本。
重定向運(yùn)算符連接一個可執(zhí)行程序和一個數(shù)據(jù)文件。
重定向運(yùn)算符不能讀取多個文件的輸入,也不能把輸出定向至多個文件。
>> 可以把數(shù)據(jù)添加到現(xiàn)有文件的末尾。
| 把一個文件的輸出連接到另一個文件的輸入。
3.4. 注釋
重定向是一個命令行概念,所以要在命令行輸入特殊的符號發(fā)出指令。
4. 創(chuàng)建更友好的用戶界面
4.1. 使用緩沖輸入
#include程序讀取 n 作為用戶否認(rèn)數(shù)字 1,然后還讀取一個換行符作為用戶否認(rèn)數(shù)字 2。
while該程序把 f 視為 n。用 if 語句篩選其他響應(yīng)。
char在編寫交互式程序時,應(yīng)該事先預(yù)料到用戶可能輸入錯誤,設(shè)計(jì)程序處理用戶的錯誤輸入。
4.2. 混合數(shù)值和字符輸入
getchar() 讀取每個字符,包括空格、制表符和換行符;而scanf() 在讀取數(shù)字時會跳過空格、制表符和換行符。
#include5. 輸入驗(yàn)證
5.1.
當(dāng)編寫了一個處理非負(fù)數(shù)整數(shù)的循環(huán),但是用戶很可能輸入一個負(fù)數(shù)。
long用 scanf() 的返回值避免用戶可能輸入錯誤類型的值。
long讓用戶再次輸入:
long該函數(shù)把一個 int 類型的值讀入變量 input 中,如果讀入成功,直接返回 input。如果讀取失敗,函數(shù)進(jìn)入第一個 while 循環(huán)體(外層 while 循環(huán)體);然后內(nèi)層循環(huán)將讀入錯誤的字符輸入,并丟棄輸入行的所有剩余內(nèi)容。
5.2. 示例
#include程序遵循模塊化編程思想,使用獨(dú)立函數(shù)(模塊)來驗(yàn)證輸入和管理顯示。
main() 函數(shù)管理程序流,為其他函數(shù)委派任務(wù)。
5.3. 輸入流和數(shù)字
考慮以下輸入:
is 28 12.4對于 C,這是一個字符流。
可以用 scanf() 函數(shù)將字符轉(zhuǎn)化為數(shù)字。
考慮以下輸入:
42- 在 scanf() 函數(shù)中
- 使用 %c 轉(zhuǎn)換說明,它只會讀取字符4并儲存在char類型變量中。
- 使用 %s 轉(zhuǎn)換說明,它會讀取字符4和字符2,并將其存儲在字符數(shù)組中。
- 使用 %d 轉(zhuǎn)換說明,它會讀取兩個字符,并計(jì)算出對應(yīng)的整數(shù)值:4 *10 + 2,然后將對應(yīng)的二進(jìn)制數(shù)儲存在 int 類型的變量中。
- 使用 %f 轉(zhuǎn)換說明,它會讀取42.0,并儲存在float類型的變量中。
- getchar() 函數(shù)接收所有字符
6. 菜單瀏覽
總結(jié)
以上是生活随笔為你收集整理的C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dubbo是长连接还是短连接_从快手短视
- 下一篇: s3c2440移植MQTT