fgetc,fputc用法

几个实例:

注:int feof(FILE *stream); //检测流上的文件结束符

feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
EOF是文本文件结束的标志。在文本文件中,数据是以 字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。 C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。
当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。
feof()可以用EOF代替吗?不可以。fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。

//写入文本
#include <stdio.h>
#include <stdlib.h>
void main()
{
	FILE *input;
	
	char ch,filename[20];
	
	printf("请输入你要写入文件的文件名和路径");
	scanf("%s",filename);
	input = fopen(filename,"rt+");
	
	if ( NULL == input  )
	{
		perror(filename);  
		exit(EXIT_FAILURE);
	}
	printf("请输入你要写入文件的文本");
	ch = getchar();//接受回车键
	ch = getchar();
	while ( ch != EOF)   
	{
		fputc(ch,input);
		ch = getchar();
	}
	
	fclose(input);
	
}
//读取文本
#include <stdio.h>
#include <stdlib.h>
void main()
{
	FILE *input;
	
	
	char ch,filename[20];
	
	
	printf("请输入你要写入文件的文件名和路径");
	scanf("%s",filename);
	input = fopen(filename,"rt+");
	
	
	if ( NULL == input  )
	{
		perror(filename);  
		exit(EXIT_FAILURE);
	}
	
	
	while ( ch != EOF)   //EOF :ctrl + z
	{
		ch = fgetc(input); 
		putchar(ch);
		
		
	}
	
	
	fclose(input);
	
	
}

///文件图片合成器,将压缩文件包封装在图片文件里
///cmd: copy /b 1.jpg+1.rar 2.jpg  

#include <stdio.h>
#include <stdlib.h>

void main()
{
	
	FILE *pfile1,*pfile2,*output;
	char filename1[20],filename2[20],filename3[20],ch1,ch2;
	printf("请输入需要合成的第一个文件地址");
	scanf("%s",filename1);
	//	getchar();
	printf("请输入需要合成的第二个文件地址");
	scanf("%s",filename2);
	//	getchar();
	printf("请输入输出文件的地址");
	scanf("%s",filename3);
	pfile1 = fopen(filename1,"rb");
	if ( NULL == pfile1)
	{
		perror(filename1);
		exit(EXIT_FAILURE);
	}
	pfile2 = fopen(filename2,"rb");
	if ( NULL == pfile2)
	{
		perror(filename2);
		exit(EXIT_FAILURE);
	}
    output = fopen(filename3,"wb");
	if ( NULL == output)
	{
		perror(filename3);
		exit(EXIT_FAILURE);
	}
	//    ch = fgetc(pfile1);
	while (  ! (feof(pfile1)) )   
	{
		ch1 = fgetc(pfile1); 
		fputc(ch1,output);
		
	}
	while (  ! (feof(pfile2)) )  
	{
		ch2 = fgetc(pfile2); 
		fputc(ch2,output);
		
	}
	
    fclose(pfile1);
	fclose(pfile2);
	fclose(output);
	system("pause");
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值