按照字符读写文件

(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 ;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值