比較C說話中getc()函數和ungetc()函數的應用。本站提示廣大學習愛好者:(比較C說話中getc()函數和ungetc()函數的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是比較C說話中getc()函數和ungetc()函數的應用正文
C說話getc()函數:從流中讀取字符
頭文件:
#include <stdio.h>
函數getc()用於從流中取字符,其原型以下:
int getc(FILE *stream);
【參數】參數*steam為要從中讀取字符的文件流。
【前往值】該函數履行勝利後,將前往所讀取的字符。
【解釋】若從一個文件中讀取一個字符,讀到文件尾而有數據時便前往EOF。getc()與fgetc()感化雷同,但在某些庫中getc()為宏界說,而非真實的函數。
【實例】上面的示例演示了getc()函數的應用,在法式中采取該函數從尺度輸出掌握台中讀取字符,代碼以下。
#include <stdio.h> //引入尺度輸出輸入庫 void main( ) { char ch; printf ("Input a character: "); //輸出提醒信息 ch = getc(stdin); // 從尺度輸出掌握台中讀取字符 printf ("The character input was: '%c'\n", ch); // 輸入字符 }
運轉上述法式,起首聲明一個用於保留所取字符的變量;然後輸 出提醒信息,吸收從尺度輸出掌握台按下的隨意率性鍵,並將該字符輸入到掌握台。
應用getc()從文件中讀取字符串,代碼以下。
#include<stdio.h> #include<string.h> #include<stdlib.h> int main(void) { int ch; int len; int i=0; FILE* fstream; char msg[100] = "Hello!I have read this file."; fstream=fopen("test.txt","at+"); if(fstream==NULL) { printf("read file test.txt failed!\n"); exit(1); } /*getc從文件流中讀取字符*/ while( (ch = getc(fstream))!=EOF) { putchar(ch); } putchar('\n'); len = strlen(msg); while(len>0)/*輪回寫入*/ { putc(msg[i],fstream); putchar(msg[i]); len--; i++; } fclose(fstream); return 0; }
函數fopen應用形式“at+”翻開文本文件,應用getc從文件流中逐一讀取字符,直到讀完。
C說話ungetc()函數:把字符退回到輸出流
頭文件:
#include<stdio.h>
ungetc()函數用於將一個字符退回到輸出流中,這個退回的字符會由下一個讀取文件流的函數獲得。其原型以下:
int ungetc(char c, FILE *stream);
【參數】c為要退回的字符,stream為要退回的輸出流。
【前往值】若該函數履行勝利,前往非零值;不然,前往0。
舉例:上面的示例演示了ungetc()函數的應用,應用該函數將字符退回到輸出流中,其代碼以下。
#include<stdio.h> #include<ctype.h> int main() { int i=0; char ch; puts("Input an integer followed by a char:"); // 讀取字符直到碰到停止符或許非數字字符 while((ch = getchar()) != EOF && isdigit(ch)) { i = 10 * i + ch - 48; // 轉為整數 } // 假如不是數字,則放回緩沖區 if (ch != EOF) { ungetc(ch,stdin); // 把一個字符退回輸出流 } printf("\n\ni = %d, next char in buffer = %c\n", i, getchar()); system("pause"); return 0; }
輸入成果:
123ab↙ i *= 123, next char in buffer = a
法式開端履行while輪回,直到碰到非數字或許停止標識能力往下履行,緊接著斷定是否是停止標識,假如不是停止標識則退回鍵盤緩沖區,在最初輸入的時刻應用getch()從緩沖區再次獲得該字符輸入。由於while中應用的是函數getchar(), 所以須要輸出字符後按回車鍵。