比較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(), 所以須要輸出字符後按回車鍵。