日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证

發(fā)布時間:2025/3/15 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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ù)字時會跳過空格、制表符和換行符。

#include

5. 輸入驗(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. 菜單瀏覽

  • 給用戶提供選項(xiàng)
  • 檢查并執(zhí)行用戶的響應(yīng)
  • 保護(hù)程序不受誤操作的影響
  • #include

    總結(jié)

    以上是生活随笔為你收集整理的C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。