概述
在C语言文件输入和输出操作的学习心得(一)介绍了一些关于C语言文件写入的知识,本文将对前文进行延伸。前文的实例中输入文件的字符是固定的,当我们需要从键盘输入字符写入文件该如何办呢?本文针对上述问题提供了相关函数的解释和一个可参考的实例。
getchar()
头文件:#include <stdio.h>
原型:int getchar(void);
功能:用于从标准输入控制台读取字符
【参数】
该函数没有参数。
【返回值】
函数的返回值为用户输入的第一个字符的ASCII码,若出错返回-1,且将用户输入的字符回显到屏幕。如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续getchar()调用读取。也就是说,后续的getchat()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。
【说明】
getchar()非真正函数,而是getc(stdin)宏定义。每次只能输入一个字符。
fputc()
相关函数:fopen, fwrite, fscanf, putc,fgetc(以上函数本文不作详细解释。如有需要,读者可自行查阅相关资料)
头文件:#include <stdio.h>
原型:int fputc(int c, FILE * stream);
功能:fputc()会将参数c 转为unsigned char 后写入参数stream 指定的文件中
【参数】
c:需要写入文件的字符
stream:被写入文件的指针变量
【返回值】
fputc()会返回写入成功的字符, 即参数c. 若返回EOF 则代表写入失败
EOF
EOF(end of file)是一个表示文件结束的标志。通俗来说,看到EOF就说明这个文件已经到了尽头。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。EOF和我们将要说明的实例有很密切的关系。我们向计算机输入字符时,计算机如何知道什么时候结束输入呢?必需认为输入一个代表结束的信号计算机才会停止输入,这个信号就是EOF。具体操作为:在新的一行输入“Ctrl+Z”然后回车,相当于告诉计算机输入结束。
实例
#include <stdio.h>
int main()
{
FILE *pFile;
char c;
pFile = fopen("test.txt", "w");
if(pFile == NULL)//文件指针为空时的措施
{
printf("can not open the file");
fclose(pFile);
return 0;
}
printf("enter .....\n");
while (c != EOF) {
c = getchar();//获取键盘输入的字符
fputc(c, pFile); //写入文件
}
fclose(pFile);//关闭文件
return 0;
}
【说明】
以上的实例演示了如何从键盘中输入字符并写入test.txt文本文件中,手动输入“Ctrl+z”为结束。请大家注意while()循环的条件,当c不为EOF时循环一直进行。虽然c没有赋值,但是其默认值不为EOF,可见即使c即使没有幅值其默认值不为EOF。由于getchar()函数每一次只能获取一个字符,所以需要不断循环才能获取一段字符串。fputc()函数同样每次只能写入一个字符,当getchar()获取字符后,fputc()马上将这个字符写进文件直到c的值为EOF为止。
有兴趣的朋友可以尝试将while()循环注释掉,只保留循环内的两条语句。运行后,输入"what a wonderful world!”。写进test.txt的字符只有“w”,验证了getchar()函数每次只能获取一个字符。
其实,实现获取键盘输入写入文件的实例还有很多,本文只提供其中一个实例作为参考。如有其他实例,欢迎各位朋友前来交流。