2.8 KiB
C 语言中的fputc()函数
原文:https://overiq.com/c-programming-101/fputc-function-in-c/
最后更新于 2020 年 7 月 27 日
fputc()函数的语法如下:
语法: int fputc(int ch, FILE *fp);
fputc()函数用于将第一个参数指定的单个字符写入 fp 指针指向的文本文件。将字符写入文本文件后,它会递增内部位置指针。如果写入成功,它将返回所写入字符的 ASCII 值。出错时,返回EOF,即-1。
虽然fputc()的正式定义说“它向文件中写入单个字符”,但这不是它的实现方式。实际上,一个一个地写一个字符是非常低效和缓慢的。相反,如果将字符一个接一个地写入文件,它们会累积在缓冲存储器中。一旦字符数达到一个合理的数字,它们就会一次性写入文件。
举个例子吧。
下面的程序演示了如何使用fputc()功能。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ch;
FILE *fp;
fp = fopen("myfile.txt", "w");
if(fp == NULL)
{
printf("Error opening file\n");
exit(1);
}
printf("Press Ctrl+Z in DOS and Ctrl+D\n\
in Linux to stop reading more characters\n\n");
printf("Enter text: ");
while( (ch=getchar()) != EOF )
{
fputc(ch, fp);
}
fclose(fp);
return 0;
}
预期输出:
Press Ctrl+Z in DOS and Ctrl+D
in Linux to stop reading more characters
Enter text: Testing fputc()
function
^D
工作原理:
在第 6 行,声明了类型为int的变量ch。
在第 7 行,声明了类型为struct FILE的结构指针变量fp。
在第 8 行中,fopen()函数用两个参数调用,即"myfile.txt"和"w"。成功后,它返回一个指向文件myfile.txt的指针,并以只写模式打开文件"myfile.txt"。故障时,返回NULL。
在第 10 行,if 语句用于测试 fp 的值。如果是NULL,printf()语句打印错误信息,程序终止。否则,程序继续执行 if 语句后面的语句。
在第 16 行和第 19 行中,printf()语句将字符串打印到控制台。
在第 21 行,while 循环与getchar()一起使用。while 循环从标准输入中读取字符并将其写入文件。请注意 while 循环的条件:
(ch=getchar()) != EOF
ch=getchar()周围的括号是必要的,因为!=运算符的优先级大于=运算符。
while 循环将继续从标准输入中读取字符,直到在 Windows 中输入 Ctrl+Z 或在 Linux 中输入 Ctrl+D。回想一下getchar()函数返回刚从标准输入中读取的字符的 ASCII 值,当遇到文件结束字符时返回EOF。一旦您输入文件结尾字符,条件就被评估为 false,并且控件会跳出 while 循环。
在第 26 行,调用fclose()函数关闭文件。
需要注意的是字符^D没有写入文件。