国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

EOF是什么?

EOF搭配while的實(shí)際應(yīng)用場(chǎng)景1

EOF搭配while的實(shí)際應(yīng)用場(chǎng)景2

補(bǔ)充

后言


EOF是什么?

EOF, 在C語(yǔ)言的標(biāo)準(zhǔn)函數(shù)庫(kù)中表示文件結(jié)束符(end of file)。在while循環(huán)中以EOF作為文件結(jié)束標(biāo)志,這種以EOF作為文件結(jié)束標(biāo)志的文件,必須是文本文件。

在文本文件中,數(shù)據(jù)都是以字符的ASCII代碼值的形式存放。我們知道,ASCII代碼值的范圍是0~127(ASCII的取值范圍應(yīng)該為0~255,0~127保留的是英文、數(shù)字和標(biāo)準(zhǔn)符號(hào),128~255是后面進(jìn)行拓展的ASCII),不可能出現(xiàn)-1,但正好EOF是定義在頭文件<stdio.h>的常量EOF的本質(zhì)是-1(ASCLL)。因此可以用EOF作為文件結(jié)束標(biāo)志

還有很多文件處理函數(shù)處錯(cuò)誤后的返回值也是EOF,因此常被用來(lái)判斷調(diào)用一個(gè)函數(shù)是否成功。


EOF搭配while的實(shí)際應(yīng)用場(chǎng)景1

#include <stdio.h>
int main()
{
	int n;
    while(scanf("%d",&n) != EOF)
    { 
	    
    }
	return 0;
}

當(dāng)上面的程序運(yùn)行時(shí),如果不加" != EOF",那么這個(gè)程序就是個(gè)死循環(huán),會(huì)一直運(yùn)行下去。

但如果加上" != EOF"后該程序就不是死循環(huán)了,如果在終端不進(jìn)行輸入該程序會(huì)自動(dòng)結(jié)束。

(while的意思就是說(shuō)當(dāng)前輸入緩存還有東西時(shí)就一直讀取,直到輸入緩存中的內(nèi)容為空時(shí)停止)


如何結(jié)束程序呢?

在終端(黑框)中手動(dòng)輸入時(shí),系統(tǒng)并不知道什么時(shí)候到達(dá)了所謂的“文件末尾”。

因此需要用<Ctrl + z>組合鍵然后按 Enter 鍵的方式來(lái)告訴系統(tǒng)已經(jīng)到了EOF,這樣系統(tǒng)才會(huì)結(jié)束while。

以下題為例:

?【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)

?【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)

·從上代碼可見(jiàn),在VS2019的情況下,需要三次<Ctrl + z>組合鍵

·上面我們說(shuō)了EOF的本質(zhì)是-1,這里又有小伙伴迷惑了,那scanf怎么能和-1相比較呢?

其實(shí)scanf函數(shù)返回值實(shí)際讀到數(shù)據(jù)的個(gè)數(shù)。例如我們輸入4,那我們的scanf函數(shù)讀到的數(shù)據(jù)個(gè)數(shù)就是1,1不等于-1,進(jìn)入while循環(huán)。【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)

【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)

參考scanf函數(shù)詳解

我們不論在scanf函數(shù)中輸入什么,要讓讀到數(shù)據(jù)的個(gè)數(shù)永遠(yuǎn)都不可能等于-1(即讓scanf讀取正常),這樣循環(huán)就不停止,就可以多組輸入。以下面寫法也是正確的。

while(scanf("%d",%i) == 1)

如果輸入正常,則scan返回值為輸入數(shù)據(jù)的個(gè)數(shù)(>=1的值),所以while循環(huán)條件為真,執(zhí)行循環(huán)。

直到scanf輸入為假(Ctrl+Z或者輸入類型不匹配的數(shù)據(jù)類型),則返回值為-1或者0。因?yàn)閟canf返回值不等于1,所以while循環(huán)條件為假,不再執(zhí)行循環(huán)。


EOF搭配while的實(shí)際應(yīng)用場(chǎng)景2

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {

    int ch;
    while ((ch = getchar()) != EOF) putchar(ch);

}

【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)

?從上面代碼和運(yùn)行結(jié)果可以看出,EOF搭配while可以控制 字符串輸入個(gè)數(shù)。

當(dāng)然用法不止這些,需要自己去探索


補(bǔ)充

當(dāng)系統(tǒng)在檢測(cè)緩沖區(qū)中是否含有流結(jié)束標(biāo)志時(shí),有兩種檢測(cè)方式:阻塞式和非阻塞式

1.阻塞式:指的是只有在回車鍵按下之后,才會(huì)對(duì)緩沖區(qū)中是否含有ctrl+z組合鍵進(jìn)行檢查。需要注意的是,當(dāng)緩沖區(qū)中含有可讀數(shù)據(jù)時(shí),ctrl+z就不是結(jié)束標(biāo)志。我們需要明白,ctrl+z產(chǎn)生的并不是一個(gè)普通的ASCⅡ碼值,也就是說(shuō)它不會(huì)跟其他從鍵盤上輸入的字符一樣,它是不能夠存放在輸入緩沖區(qū)中的。

2.非阻塞時(shí):指的是一旦按下ctrl+d之后立即響應(yīng)。

如果之前沒(méi)有輸入字符,那么ctrl+d就是流結(jié)束標(biāo)志。

如果之前已經(jīng)輸入了字符,那么ctrl+d此時(shí)就相當(dāng)于回車不再是流結(jié)束標(biāo)志,并且具有回車的功能(將輸入字符送入緩沖區(qū)),并且這個(gè)回車自己也會(huì)進(jìn)入緩沖區(qū)?。?!

當(dāng)然了windows系統(tǒng)一般采用阻塞式檢查(ctrl+z),linux系統(tǒng)一般采用非阻塞式檢查(ctrl+d)
?


后言

本篇作為本人剛開(kāi)始學(xué)習(xí)以來(lái)第一篇技術(shù)性博客,可能存在沒(méi)解釋通、漏解釋、或者解釋錯(cuò)誤的地方。希望各位可以在評(píng)論區(qū)指出我的問(wèn)題,如果可以得到您的解決方案,我將不勝感激。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-496317.html

到了這里,關(guān)于【C語(yǔ)言】EOF搭配while循環(huán)來(lái)控制scanf輸入的次數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語(yǔ)言的while循環(huán)、do-while循環(huán)、for循環(huán)

    1 while循環(huán) 一般形式為: 意思是,先計(jì)算“表達(dá)式”的值,當(dāng)值為真(非0)時(shí), 執(zhí)行“語(yǔ)句塊”;執(zhí)行完“語(yǔ)句塊”,再次計(jì)算表達(dá)式的值,如果為真,繼續(xù)執(zhí)行“語(yǔ)句塊”……這個(gè)過(guò)程會(huì)一直重復(fù),直到表達(dá)式的值為假(0),就退出循環(huán),執(zhí)行 while 后面的代碼 2 do-while循

    2024年02月10日
    瀏覽(100)
  • 【C語(yǔ)言】連續(xù)使用多個(gè)scanf函數(shù)時(shí)輸入數(shù)據(jù)

    【C語(yǔ)言】連續(xù)使用多個(gè)scanf函數(shù)時(shí)輸入數(shù)據(jù)

    在多次使用scanf函數(shù)時(shí)常常會(huì)出現(xiàn)下面的情況: 運(yùn)行下列代碼: (1)有關(guān)回車(Enter) 從鍵盤中輸入: 按回車(Enter)后輸入: 按回車(Enter)后運(yùn)行結(jié)果為: (2)有關(guān)空格 從鍵盤中輸入(含空格): 按回車(Enter)后運(yùn)行結(jié)果為: 運(yùn)行下列代碼: (1)有關(guān)回車(Enter)

    2024年02月06日
    瀏覽(18)
  • 【C語(yǔ)言】scanf多組輸入的三種方法!

    【C語(yǔ)言】scanf多組輸入的三種方法!

    ?? 鴿芷咕 :個(gè)人主頁(yè) ??? 個(gè)人專欄 :《C語(yǔ)言初階篇》 《C語(yǔ)言進(jìn)階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好啊,相信大家都多多少少了用過(guò)scanf語(yǔ)句吧,但是對(duì)scanf函數(shù)沒(méi)有全面的認(rèn)識(shí)僅僅只是知道可以輸入。 ?? ?? 今天博主就給大

    2024年02月06日
    瀏覽(18)
  • C++ While 和 For 循環(huán):流程控制全解析

    使用 switch 語(yǔ)句選擇要執(zhí)行的多個(gè)代碼塊之一。 語(yǔ)法 它的工作原理如下: switch 表達(dá)式被評(píng)估一次 表達(dá)式的值與每個(gè) case 的值進(jìn)行比較 如果找到匹配項(xiàng),則執(zhí)行關(guān)聯(lián)的代碼塊 break 和 default 是可選的 下面的示例使用星期幾的數(shù)字來(lái)計(jì)算星期幾的名稱: 示例 當(dāng) C++ 遇到

    2024年04月08日
    瀏覽(21)
  • Jmeter——循環(huán)控制器中實(shí)現(xiàn)Counter計(jì)數(shù)器的次數(shù)重置

    Jmeter——循環(huán)控制器中實(shí)現(xiàn)Counter計(jì)數(shù)器的次數(shù)重置

    近期在使用Jmeter編寫個(gè)輔助測(cè)試的腳本,用到了多個(gè)Loop Controller和Counter。 當(dāng)時(shí)想的思路就是三個(gè)可變的數(shù)量值,使用循環(huán)實(shí)現(xiàn);但第三個(gè)可變值的數(shù)量次數(shù),是基于第二次循環(huán)中得到的結(jié)果才能確認(rèn)最終次數(shù),每次的結(jié)果還會(huì)有不一樣的情況?;谒悸?,先寫了個(gè)線性腳本

    2024年03月18日
    瀏覽(25)
  • 【C語(yǔ)言基礎(chǔ)考研向】05 scanf讀取標(biāo)準(zhǔn)輸入超詳解

    【C語(yǔ)言基礎(chǔ)考研向】05 scanf讀取標(biāo)準(zhǔn)輸入超詳解

    文章目錄 一.scanf函數(shù)的原理 樣例 問(wèn)題原因 解決方法 二.多種數(shù)據(jù)類型混合輸入 錯(cuò)誤樣例 正確樣例 ??C語(yǔ)言未提供輸入/輸出,其輸入和輸出是通過(guò)標(biāo)準(zhǔn)函數(shù)庫(kù)來(lái)實(shí)現(xiàn)的。C語(yǔ)言通過(guò)scanf函數(shù)讀取鍵盤輸入, 鍵盤輸入又被稱為標(biāo)準(zhǔn)輸入 。當(dāng)scanf函數(shù)讀取標(biāo)準(zhǔn)輸入時(shí),如

    2024年01月22日
    瀏覽(24)
  • Python條件控制和循環(huán)語(yǔ)句(if while for )

    同樣需要注意冒號(hào)和縮進(jìn)。另外,在 Python 中沒(méi)有 do..while 循環(huán)。 while+else whlie+break break跳出本層循環(huán)的含義 標(biāo)志位的使用 while+continue 死循環(huán): 程序中堅(jiān)決不能出現(xiàn)死循環(huán) for循環(huán)不會(huì)出現(xiàn)死循環(huán),它的循環(huán)條件不是我們來(lái)控制,是人家內(nèi)部已經(jīng)控制好了 for循環(huán)和while循環(huán)都是

    2024年02月11日
    瀏覽(24)
  • 【C語(yǔ)言】while循環(huán)語(yǔ)句

    【C語(yǔ)言】while循環(huán)語(yǔ)句

    ??個(gè)人主頁(yè):豌豆射手^ ??歡迎 ??點(diǎn)贊?評(píng)論?收藏 ??收錄專欄:C語(yǔ)言 ??希望本文對(duì)您有所裨益,如有不足之處,歡迎在評(píng)論區(qū)提出指正,讓我們共同學(xué)習(xí)、交流進(jìn)步! 引言 在C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是一種強(qiáng)大的工具,能夠重復(fù)執(zhí)行一段代碼,直到滿足特定條件。而

    2024年03月18日
    瀏覽(22)
  • c語(yǔ)言之while循環(huán)

    while循環(huán)語(yǔ)法格式是 while(表達(dá)式)語(yǔ)句 這里的語(yǔ)句可以是代碼塊,用{}表示 比如要顯示0-10000年的所有閏年 代碼如下 而用python去實(shí)現(xiàn)相同的功能代碼如下

    2024年02月19日
    瀏覽(13)
  • C 語(yǔ)言用戶輸入詳解:scanf、fgets、內(nèi)存地址解析及實(shí)用指南

    您已經(jīng)學(xué)習(xí)了 printf() 函數(shù)用于在 C 語(yǔ)言中輸出值。 要獲取用戶輸入,可以使用 scanf() 函數(shù): scanf() 函數(shù)接受兩個(gè)參數(shù):變量的格式說(shuō)明符(在本例中為 %d )和引用運(yùn)算符( myNum ),用于存儲(chǔ)變量的內(nèi)存地址。 scanf() 函數(shù)還允許進(jìn)行多個(gè)輸入(例如,在下面的例子中,用戶可

    2024年02月03日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包