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

C語言中g(shù)etchar()的返回類型為什么是int詳解

 更新時(shí)間:2018年11月15日 14:49:07   作者:標(biāo)點(diǎn)符  
這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar()的返回類型為什么是int的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在C語言中有個(gè)重要的庫(kù)函數(shù)getchar(),可從終端獲得一個(gè)字符的ASCII碼值。在終端輸入字符時(shí)并非輸入一個(gè)字符就會(huì)返回,而是在遇到回車換行前,所有輸入的在C語言中有個(gè)重要的庫(kù)函數(shù)getchar(),可從終端獲得一個(gè)字符的ASCII碼值。在終端輸入字符時(shí)并非輸入一個(gè)字符就會(huì)返回,而是在遇到回車換行前,所有輸入的字符都會(huì)緩沖在鍵盤緩沖器中,直到回車換行一次性將所有字符按序依次賦給相應(yīng)的變量,在這里一定要注意最后一個(gè)字符即'\n',該字符也會(huì)賦給一個(gè)相應(yīng)的變量(當(dāng)然這要你定義的用來接收字符的變量數(shù)比你輸入的可見字符多一才可以)。

然而最近在重新閱讀K&R的《C程序設(shè)計(jì)語言》時(shí)對(duì)getchar()這個(gè)自帶的函數(shù)的返回值產(chǎn)生了疑惑。從字面上看,給函數(shù)返回的類型應(yīng)該是char型,但在示例中,卻將返回內(nèi)容賦值給了int型變量,示例代碼如下:

#include <stdio.h>
 
/* 將輸入復(fù)制到輸出 */ 
int main(void)
{
 int c;
 while ((c = getchar()) != EOF){
 putchar(c);
 }
 return 0;
}

書中給出的解釋為:

因?yàn)槟承撛诘闹匾?,我們?cè)诖耸褂胕nt類型。

這里作者并沒有對(duì)重要原因給出明確的說明,我試著將int修改為char,發(fā)現(xiàn)程序還是能夠正常編譯與執(zhí)行,這更加讓我疑惑!經(jīng)過一翻搜索,找到的答案如下。

1、getchar()除了返回正常的字符外,還會(huì)返回輸入結(jié)束符EOF(end of file)。該函數(shù)原型如下:

int getchar(void)
{
 static char buf[BUFSIZ];
 static char *bb = buf;
 static int n = 0;
 if(n == 0)
 {
  n = read(0, buf, BUFSIZ);
  bb = buf;
 }
 return(--n >= 0)?(unsigned char) *bb++ : EOF;
}

2、EOF通常在<stdio.h>文件中被定義為-1:

#define BUFSIZ 512
#define _NFILE _NSTREAM_
#define _NSTREAM_ 512
#define _IOB_ENTRIES 20
#define EOF (-1)

3、各種數(shù)據(jù)類型能表示的數(shù)值范圍由編譯器決定。char類型在有些編譯器中定義的范圍為0~255,另外一些編譯器中定義的范圍為-128~127。當(dāng)編譯器中定義的范圍為0~255時(shí),用char接收getchar()返回值時(shí)就會(huì)出錯(cuò)。數(shù)據(jù)類型具體的定義范圍可在<limits.h>文件中找到:

#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 0xff
 
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX

4、將int改為char后能在我的電腦上正常編譯,時(shí)由于我的編譯器中定義的范圍為-128~127,當(dāng)用char接收時(shí)會(huì)隱式的轉(zhuǎn)化為char類型。

5、即使編譯器總定義的范圍為-128~127,程序也有可能出錯(cuò)。雖然常見字符到127位就結(jié)束了。但是ASCII表中分配到的時(shí)256。128~256為拓展字符,如常用的歐元符號(hào)等均在內(nèi)。

綜上:getchar()返回的內(nèi)容用更大范圍區(qū)間的int型接收,才能使程序更加穩(wěn)健。

總結(jié)

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

相關(guān)文章

  • 在Visual Studio 2019中修改項(xiàng)目名的方法

    在Visual Studio 2019中修改項(xiàng)目名的方法

    這篇文章主要介紹了在Visual Studio 2019中修改項(xiàng)目名的方法,文中通過示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C++ GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    C++ GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    GDI+(Graphics Device Interface Plus)是一種用于圖形繪制和圖像處理的應(yīng)用程序編程接口(API),在Windows平臺(tái)上廣泛使用,本文就來介紹一下如何使用GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換吧
    2023-12-12
  • C++制作DLL文件的方法詳解

    C++制作DLL文件的方法詳解

    本文主要介紹如何制作DLL,將代碼類中的方法以接口的形式暴露出來給exe程序使用。會(huì)涉及類廠創(chuàng)建方法實(shí)例、聲明DLL接口、.def文件的使用等,感興趣的可以了解一下
    2023-04-04
  • C語言學(xué)習(xí)基礎(chǔ)知識(shí)分享

    C語言學(xué)習(xí)基礎(chǔ)知識(shí)分享

    這篇文章主要介紹了C語言學(xué)習(xí)基礎(chǔ)知識(shí)分享的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C C++ LeetCode題解在二叉樹中增加一行示例詳解

    C C++ LeetCode題解在二叉樹中增加一行示例詳解

    這篇文章主要為大家介紹了C C++ LeetCode題解在二叉樹中增加一行示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • C語言實(shí)現(xiàn)快速排序

    C語言實(shí)現(xiàn)快速排序

    快速排序不一定是穩(wěn)定排序,這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)快速排序算法,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒閱讀
    2023-03-03
  • 介紹C語言程序中的注釋等輔助語句如何使用

    介紹C語言程序中的注釋等輔助語句如何使用

    C語言中分為單行注釋和多行注釋:?jiǎn)涡凶⑨?以?//?開始的這一行文本,可能不被編譯器所支持;多行注釋從?/*?到?*/之間的所有文本,不支持嵌套,下面讓我們?cè)敿?xì)來了解
    2022-04-04
  • C語言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    C語言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    這篇文章主要介紹了C語言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能,結(jié)合具體實(shí)例形式分析了C語言棧和隊(duì)列的定義及使用棧和隊(duì)列進(jìn)行回文檢測(cè)的操作技巧,需要的朋友可以參考下
    2017-06-06
  • 從頭學(xué)習(xí)C語言之字符串處理函數(shù)

    從頭學(xué)習(xí)C語言之字符串處理函數(shù)

    這篇文章主要為大家詳細(xì)介紹了C語言之字符串處理函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,?希望能夠給你帶來幫助
    2022-01-01
  • C語言百行代碼繪制圣誕水晶球

    C語言百行代碼繪制圣誕水晶球

    今天就是圣誕節(jié)了,本文將再教大家一個(gè)圣誕項(xiàng)目——圣誕水晶球,今天這個(gè)呢代碼不多,但難度會(huì)有點(diǎn)。感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2021-12-12

最新評(píng)論

安国市| 琼中| 林甸县| 明光市| 太仓市| 微山县| 基隆市| 吴忠市| 休宁县| 潮安县| 杭锦旗| 苍梧县| 东阳市| 襄城县| 舒兰市| 桦南县| 屏东县| 大关县| 濮阳县| 密云县| 蓬莱市| 高平市| 凌源市| 龙陵县| 陆良县| 凌云县| 砚山县| 哈尔滨市| 额济纳旗| 江门市| 乐陵市| 娄烦县| 皮山县| 尼玛县| 景德镇市| 札达县| 定兴县| 南京市| 永城市| 上蔡县| 根河市|