最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中輸入函數(shù)(scanf()、fgets()和gets())的區(qū)別詳解

 更新時(shí)間:2017年11月30日 09:26:42   作者:Leon_Geo  
這篇文章主要給大家介紹了關(guān)于C語言中三種輸入函數(shù)(scanf()、fgets()和gets())區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

大家都知道在C語言中,有三種主要的輸入函數(shù):scanf(),fgets()以及gets()。他們的使用方法及注意事項(xiàng)如下:

1.scanf()

它是一種格式化的輸入方式,可一次性按照規(guī)定的格式輸入多個(gè)數(shù)據(jù)域。

scanf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。與printf函數(shù)相同,C語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。

scanf函數(shù)的一般形式為:

scanf(“格式控制字符串”, 地址表列);

其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給出各變量的地址。地址是由地址運(yùn)算符“&”后跟變量名組成的。

例如:&a、&b分別表示變量a和變量b的地址。

下面以輸入規(guī)定的長度的字符串為例,來說說它的使用方法和容易產(chǎn)生的bug。

要求:定義一個(gè)長度為10的個(gè)字符數(shù)組,由用戶通過鍵盤為其賦值。

Code:

  char name[10];

  scanf("%9s",name);

說明:之所以使用%9s是因?yàn)槲覀冞€需要預(yù)留一個(gè)位置給字符串結(jié)束標(biāo)志'\0',所以用戶輸入的名字最長只能為9,且其中不能包含空格類字符(空格,回車,首行縮進(jìn)符),因?yàn)閟canf函數(shù)認(rèn)為它們是字符串的結(jié)尾。

危險(xiǎn):當(dāng)用戶輸入的名字超過9個(gè)衣服時(shí),系統(tǒng)將會(huì)產(chǎn)生段錯(cuò)誤(segment fault),如果運(yùn)氣好程序可能不會(huì)提示錯(cuò)誤,如果不好,可能內(nèi)存中重要的數(shù)據(jù)被覆蓋!

2.fgets(char *name, int length, fd)

頭文件:include<stdio.h>

該函數(shù)從文件描述符fd指定的文件獲得length個(gè)字符存入從name開始的length個(gè)內(nèi)存單元中。由于其形參中規(guī)定了最大接受字符數(shù),故不會(huì)發(fā)生像scanf函數(shù)那樣的緩存溢出的問題。

要求:定義一個(gè)長度為10的個(gè)字符數(shù)組,由用戶通過鍵盤為其賦值。

Code:

  char name[10];

  fget(name,sizeof(name),stdin);

說明:因?yàn)榇颂巒ame是一個(gè)數(shù)組名,雖然它本質(zhì)上是一個(gè)指針,但聰明的sizeof函數(shù)會(huì)把他區(qū)別于一般的指針變量,從而根據(jù)之前的定義求出數(shù)組的長度。但若是一般的指針變量,sizeof函數(shù)求出的值就是4或是8了。

3.gets()

它通過鍵盤獲得字符串輸入,并且沒有任何字符串長度上的限制和檢測,建議應(yīng)該避免在我們的代碼中使用該函數(shù)!

要求:定義一個(gè)長度為10的個(gè)字符數(shù)組,由用戶通過鍵盤為其賦值。

Code:

  char name[10];

  gets(name);

注意:本函數(shù)可以無限讀取,不會(huì)判斷上限,所以程序員應(yīng)該確保buffer的空間足夠大,以便在執(zhí)行讀操作時(shí)不發(fā)生溢出。為了避免這種情況,我們可以用fgets()來替換gets()。

危險(xiǎn):任何時(shí)候均要避免使用該函數(shù),雖然它存在已經(jīng)有很長一段時(shí)間了。

區(qū)別:

1.是否對(duì)用戶輸入的字符個(gè)數(shù)有所限制?

兩者均有所限制,但scanf函數(shù)需要你在格式化說明符中顯示注明,若不注明則無限制,可能會(huì)導(dǎo)致溢出事故;fgets函數(shù)則將其作為一個(gè)形參予以強(qiáng)制規(guī)定。

2.用戶是否可以同時(shí)輸入多個(gè)域的數(shù)據(jù)?

scanf函數(shù)可以通過添加多個(gè)格式化輸入說明符來實(shí)現(xiàn)多域輸入,而fgets函數(shù)每次僅能對(duì)一個(gè)域賦值。

3.用戶輸入的字符串中可以包含空格類字符嗎?

 scanf函數(shù)會(huì)把空格符當(dāng)做字符串的結(jié)束符,故不可以在一個(gè)字符串中含有空格。而否則可以。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • C++輕量級(jí)界面開發(fā)框架ImGUI介紹小結(jié)

    C++輕量級(jí)界面開發(fā)框架ImGUI介紹小結(jié)

    如果從事過C++?Windows客戶端開發(fā),大家對(duì)MFC、Qt、DuiLib等各種DirectUI應(yīng)該有了解,本篇給大家介紹一個(gè)超級(jí)輕量級(jí)的C++開源跨平臺(tái)圖形界面框架ImGUI,感興趣的可以了解一下
    2021-11-11
  • C++中引用&與取地址&的區(qū)別分析

    C++中引用&與取地址&的區(qū)別分析

    這篇文章主要介紹了C++中引用&與取地址&的區(qū)別,有助于C++初學(xué)者更好的掌握指針的概念及用法,需要的朋友可以參考下
    2014-09-09
  • C語言解字符串逆序和單向鏈表逆序問題的代碼示例

    C語言解字符串逆序和單向鏈表逆序問題的代碼示例

    這篇文章主要介紹了C語言解字符串逆序和單向鏈表逆序問題的代碼示例,求逆序也是考研和面試中的基礎(chǔ)算法題類型,需要的朋友可以參考下
    2016-06-06
  • C++ 獲取dll當(dāng)前路徑下所有文件

    C++ 獲取dll當(dāng)前路徑下所有文件

    本文主要介紹了C++ 獲取dll當(dāng)前路徑下所有文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • C++中mutable與volatile的深入理解

    C++中mutable與volatile的深入理解

    這篇文章主要給的阿加介紹了關(guān)于C++中mutable與volatile的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • C語言動(dòng)態(tài)內(nèi)存分配圖文講解

    C語言動(dòng)態(tài)內(nèi)存分配圖文講解

    給數(shù)組分配多大的空間?你是否和初學(xué)C時(shí)的我一樣,有過這樣的疑問。這一期就來聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解
    2023-01-01
  • Linux下g++編譯與使用靜態(tài)庫和動(dòng)態(tài)庫的方法

    Linux下g++編譯與使用靜態(tài)庫和動(dòng)態(tài)庫的方法

    下面小編就為大家?guī)硪黄狶inux下g++編譯與使用靜態(tài)庫和動(dòng)態(tài)庫的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 如何實(shí)現(xiàn)一定概率選中某一個(gè)字母

    如何實(shí)現(xiàn)一定概率選中某一個(gè)字母

    本篇文章是對(duì)如何實(shí)現(xiàn)一定概率選中某一個(gè)字母的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng)

    C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++聚合體初始化aggregate initialization詳細(xì)介紹

    C++聚合體初始化aggregate initialization詳細(xì)介紹

    這篇文章主要介紹了C++聚合體初始化aggregate initialization,C++有很多初始化對(duì)象的方法。其中之一叫做 聚合體初始化(aggregate initialization) ,這是聚合體專有的一種初始化方法
    2023-02-02

最新評(píng)論

岳阳市| 永济市| 新乡市| 上栗县| 金平| 安阳市| 麻城市| 淮滨县| 昭平县| 东城区| 视频| 靖远县| 太仓市| 酉阳| 兴海县| 丹巴县| 湖北省| 蒙城县| 阿荣旗| 视频| 桑日县| 封开县| 苍山县| 崇明县| 西城区| 宜宾县| 南城县| 凤翔县| 福鼎市| 长子县| 炎陵县| 手游| 十堰市| 中卫市| 宜黄县| 玛沁县| 龙岩市| 英德市| 伊宁县| 东辽县| 清流县|