(1).读写文件中字符的函数(一次只读写文件中的一个字符):
int fgetc(FILE *stream);
int fgetchar(void);
int fputc(int ch,FILE *stream);
int fputchar(int ch);
int getc(FILE *stream);
int putc(int ch,FILE *stream);
其中fgetc()函数将把由流指针指向的文件中的一个字符读出,例如:
ch=fgetc(fp);
将把流指针fp指向的文件中的一个字符读出,并赋给ch,当执行fgetc()函数时,若当时文件指针指到文件尾,即遇到文件结束标志EOF(其对应值为-1),该函数返回一个-1给ch,在程序中常用检查该函数返回值是否为-1来判断是否已读到文件尾,从而决定是否继续。
#include "stdio.h"
main()
{
FILE *fp;
ch ch;
if((fp=fopen("myfile.tex","r"))==NULL)
{
printf("file cannot be opened\n");
exit(1);
}
while((ch=fgetc(fp))!=EOF) fputc(ch,stdout);
fclose(fp);
}
该程序以只读方式打开myfile.txt文件,在执行while循环时,文件指针每循环一次后移一个字符位置。用fgetc()函数将文件指针指定的字符读到ch变量中,然后用fputc()函数在屏幕上显示,当读到文件结束标志EOF时,变关闭该文件。
上面的程序用到了fputc()函数,该函数将字符变量ch的值写到流指针指定的文件中去,由于流指针用的是标准输出(显示器)的FILE指针stdout,故读出的字符将在显示器上显示。又比如:
putc(ch,fp);
该函数执行结构,将把ch表示的字符送到流指针fp指向的文件中去。
在TC中,putc()等价于fput(),getc()等价于fgetc()。
putchar(c)相当于fputc(c,stdout);getchar()相当于fgetc(stdin)。
注意,这里使用char ch,其实是不科学的,因为最后判断结束标志时,是看ch!=EOF,而EOF的值为-1,这显然和char是不能比较的。所以,某些使用,我们都定义成int ch。
示例代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void main01_fputc()
{
int i = 0;
FILE *fp = NULL;
//char *filename = "c:\\1.txt";
char *filename2 = "c:/2.txt"; // 统一的用45度
char a[27]= "abcdefghijklmn";
fp = fopen(filename2, "r+");
if (fp == NULL)
{
printf("func fopen() err:%d \n");
return;
}
printf("打开成功\n");
for (i=0; i<strlen(a); i++)
{
fputc(a[i], fp);
}
fclose(fp);
return ;
}
void main02_fgetc()
{
int i = 0;
FILE *fp = NULL;
//char *filename = "c:\\1.txt";
char *filename2 = "c:/2.txt"; // 统一的用45度
char a[27]= "abcdefghijklmn";
fp = fopen(filename2, "r+"); //读和写方式
if (fp == NULL)
{
printf("func fopen() err:%d \n");
return;
}
printf("打开成功\n");
while (!feof(fp))
{
char tempc = fgetc(fp);
printf("%c", tempc);
}
if (fp != NULL)
{
fclose(fp);
}
return ;
}
void main11()
{
//main01_fputc();
main02_fgetc();
printf("hello...\n");
system("pause");
return ;
}