欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語言

C語言中函數(shù)的區(qū)分

時間:2025-04-10 20:00:28 C語言 我要投稿
  • 相關(guān)推薦

C語言中函數(shù)的區(qū)分

  C語言的應(yīng)用范圍廣泛,具備很強的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件,三維,二維圖形和動畫,具體應(yīng)用比如單片機以及嵌入式系統(tǒng)開發(fā)。以下是小編為大家搜索整理的C語言中函數(shù)的區(qū)分,希望能給大家?guī)韼椭?更多精彩內(nèi)容請及時關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  首先,這兩個函數(shù)不是C標(biāo)準(zhǔn)庫中的函數(shù),

  int getch(void)    //從標(biāo)準(zhǔn)輸入讀入一個字符,當(dāng)你用鍵盤輸入的時候,屏幕不顯示你所輸入的字符。也就是,不帶回顯。

  int getche(void)    //從標(biāo)準(zhǔn)輸入讀入一個字符,鍵盤輸入的時候,屏幕顯示所輸入的字符。帶回顯。

  這兩個函數(shù)包含在頭文件conio.h中,需要記住的是conio.h不是C標(biāo)準(zhǔn)庫中的頭文件。Micorsoft 和 Borland的 C編譯器提供了conio.h,用來創(chuàng)建控制臺文本用戶界面。一般在Windows系統(tǒng)下安裝了VS、VC等,就可以包含conio.h頭文件。但是一般在Unix、Linux系統(tǒng)中, / usr / include / 中都沒有這個頭文件。

  getch和getche在等待用戶從鍵盤輸入的時候,用戶按下一個鍵后,不需要按回車,程序自動往下執(zhí)行。在Linux中,終端輸入在缺省情況下是被“一鍋端”的,也就是說整行輸入是被一起處理的。通常,這是一種人們所希望的方便的辦法,但它也意味著在讀入數(shù)據(jù)時必須按一下回車鍵表示輸入行結(jié)束后才能得到輸入的數(shù)據(jù)。在游戲中,很多都提供了“老板鍵”,它的實現(xiàn),就是利用了這兩個函數(shù)。

  其次,除了getch和getche,其他的都是C標(biāo)準(zhǔn)庫中的頭文件,包含在頭文件stdio.h中。

  int fgetc ( FILE *stream ); //從流stream中讀一個字符?梢詫(biāo)準(zhǔn)輸入stdin作為它的實參,這時候從標(biāo)準(zhǔn)輸入讀取一個字符。

  int getc(FILE *stream); //和fgetc等效,由fgetc通過宏實現(xiàn)。

  int getchar ( void );

  //從標(biāo)準(zhǔn)輸入stdin讀入一個字符,程序等待你輸入的時候,你可以輸入多個字符,回車后程序繼續(xù)執(zhí)行。

  //但getchar只讀入一個字符

  說明:

  getc、getchar都是通過宏定義借助fgetc實現(xiàn)。如getchar的實現(xiàn)為,#define getchar() fgetc(stdin)。

  char *fgets (char *str, int num, FILE *stream);

  //從流stream中讀入最多num個字符到字符數(shù)組str中,當(dāng)遇到換行符時、或讀到num-1個字符時停止。

  //自動加上'\0'空字符結(jié)尾

  char *gets ( char *str );

  //從標(biāo)準(zhǔn)輸入stdin讀取一個字符串,遇到換行或結(jié)束時候終止。

  //不同于fgets,他沒有指定num,所以需要注意字符數(shù)組str的大小。

  說明: fgets和gets之間沒有宏定義的關(guān)系,彼此各自有自己的實現(xiàn)。蠕蟲病毒的實現(xiàn)就是函數(shù)gets的“功勞”。gets函數(shù)的任務(wù)是從流中讀入一個字符串。它的調(diào)用者會告訴它把讀入的字符串放在什么地方。但是,gets()函數(shù)并不檢查緩沖區(qū)大小,如果調(diào)用者提供了一個指向堆棧的指針,并且get()函數(shù)讀入的字符數(shù)量超過了超過了緩沖區(qū)的空間大小,get()會愉快地將多出來的字符繼續(xù)寫入到堆棧中,這就覆蓋了堆棧中原來的內(nèi)容。如:

  main()

  {

  char line[512]; //在程序的堆棧上分配512個字符的空間

  ...

  gets(line); //蠕蟲病毒的入口,可以將惡意代碼通過多出來的數(shù)據(jù)寫入堆棧

  }

  建議不要用getch和getche,因為它們不是C標(biāo)準(zhǔn)庫中的函數(shù)。用它們寫出的程序可移植性差,不同的編譯器不保證可以包含conio.h。建議用fgets函數(shù)徹底替代gets函數(shù)。

  另外,絕大多數(shù)的這些get函數(shù),都有對應(yīng)的put版本。

  int fputc ( int character, FILE *stream );

  int putc ( int character, FILE *stream ); //通過宏定義和fputc實現(xiàn)

  int putchar ( int character );

  //通過宏定義實現(xiàn):#define putchar(c) fputc(c, stdout)

  int fputs ( const char *str, FILE *stream );

  int puts ( const char *str );

  說明:兩者之間無宏定義實現(xiàn)關(guān)系。puts(const char *str)近似等效于fputs(cosnt char *str, stdout),不同點是前者還輸出一個'\n'

  最后,關(guān)于EOF

  EOF是在stdio.h文件中定義的符號常量,值為 -1。如,

  fputc函數(shù)返回一個值:如果輸出成功則返回值就是輸出的字符;如果輸出失敗,則返回一個EOF。

  fgetc函數(shù)讀字符時遇到文件結(jié)束符,函數(shù)返回一個文件結(jié)束標(biāo)記EOF。如果想從一個磁盤文件順序讀入字符并在屏幕上顯示,可以:

  ch = fgetc(fp);

  while(ch != EOF)

  {

  putchar(ch);

  ch = fgetc(fp);

  }

  注意,EOF不是可輸出字符,因此不能在屏幕上顯示。由于ASCII碼不可能出現(xiàn) -1,因此EOF定義為 -1是合適的。當(dāng)讀入的字符值等于 -1(即 EOF)時,表示讀入的已不是正常的字符,而是文件結(jié)束符。但以上只適用于讀取文本文件的情況,F(xiàn)在ANSI C 已經(jīng)允許用緩沖文件系統(tǒng)處理二進(jìn)制文件,而讀入某一個字節(jié)中的二進(jìn)制數(shù)據(jù)的值有可能是 -1,而這又恰好是EOF的值。這就出現(xiàn)了需要讀入有用數(shù)據(jù),卻處理為“文件結(jié)束”。feof(fp) 用來測試fp所指向的文件當(dāng)前狀態(tài)是否是“文件結(jié)束”。如果想順序讀入一個二進(jìn)制文件數(shù)據(jù),可以:

  while(!feof(fp))

  {

  c = fgetc(fp);

  ...

  }

  ===================================================

  三種字符輸入getchar,getch,getche的區(qū)別(C語言)

  getch,getchar這兩個以前用過,可是遇到了getche,頭一次,此時用一小段代碼部分測試就知道了。

  代碼1:

  ------------------------------------------------------------------------getch()

  #include

  #include

  int main()

  {

  char ch;

  printf("輸入一個字符:");

  ch=getch();

  printf("\n你輸入的字符是:'%c'\n",ch);

  return 0;

  }

  --------------------------------------------------------------------

  小結(jié):

  當(dāng)我輸入 6

  字符在下一行就顯示了,我的 輸入就沒有輸入 ,回車也沒有

  代碼2:

  -----------------------------------------------------------------getchar();

  #include

  #include

  int main()

  {

  char ch;

  printf("輸入一個字符:");

  ch=getchar();

  printf("\n你輸入的字符是:'%c'\n",ch);

  return 0;

  }

  ---------------------------------------------------------------------

  小結(jié):我輸入 6之后 回車 之后字符輸入了進(jìn)去,此時出現(xiàn)的輸入顯示,并且中間空格了

  代碼3:

  --------------------------------------------------------------------------------------------------------getche();

  #include

  #include

  int main()

  {

  char ch;

  printf("輸入一個字符:");

  ch=getche();

  printf("\n你輸入的字符是:'%c'\n",ch);

  return 0;

  }

  ----------------------------------------------------------------------------------------------------

  小結(jié):我只是輸入了一個 6 并沒有回車,輸入的字符顯示,并且自動轉(zhuǎn)入下一行繼續(xù)執(zhí)行。

  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  經(jīng)過上面的代碼運行,以及運行之后的比較,三種字符輸入,或多或少的有細(xì)微的差別,通過運行截圖,已經(jīng)看出來了。

【C語言中函數(shù)的區(qū)分】相關(guān)文章:

C語言中函數(shù)的區(qū)分有哪些10-25

C語言中g(shù)ets()函數(shù)知識08-10

C語言中關(guān)于時間的函數(shù)10-24

C語言中strpbr()函數(shù)的用法07-25

c語言中time函數(shù)的用法08-27

C語言中isalnum()函數(shù)和isalpha()函數(shù)的對比10-12

C語言中Swift函數(shù)調(diào)用實例09-25

C語言中編寫可變參數(shù)函數(shù)09-28

在C語言中函數(shù)調(diào)用方式的區(qū)別09-01