问题描述:设在文件a.txt和文件b.txt中分别存有两个字符串,设计一个程序将这2个字符串按依序交叉的方式合并成一个字符串(如"aaaaa"和"bbb")的合并结果为"abababaa",而"bbb"和"aaaaa"的合并结果为"bababaa",并将结果存放文件a.txt中
feof()函数:
在stdio.h中feof的定义:
#define _IOEOF 0x0010
#define feof(_stream) ((_stream)->_flag & _IOEOF)
由此可知,只有当fp->_flag & 0x0010为真时,才认为文件结束了。在VC里,只有当file position indicator(在Windows上是fp->_ptr)到了文件末尾,然后再发生读/写操作时,fp->_flag才会被置为含有_IOEOF,然后再调用feof(),才会得到文件结束的信息,并不是file position indicator一指到文件尾,feof()就认为文件结束。
fgetc函数:
在文件处理中,通过fgetc()函数,我们从输入流中获取下一个字符,并将文件指针加1。 函数fgetc()的原型是: int fgetc(FILE * filename);
It returns an integer value which is conversion of an unsigned char. It also returns EOF which also in turns an integer value.
它返回一个整数值,该值是无符号char的转换。 它还返回EOF ,而EOF也是一个整数值
rewind()函数:
功 能: 将文件内部的位置 指针重新指向一个流( 数据流/文件)的开头
注意:不是 文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp,*fq,*fr;
char ch;
fp=fopen("C:/Users/dell/Desktop/a.txt","r+");
fq=fopen("C:/Users/dell/Desktop/b.txt","r+");
fr=fopen("C:/Users/dell/Desktop/c.txt","w+");
if(fp==NULL){
printf("cannot open file a.txt");
exit(0);
}
if(fq==NULL){
printf("cannot open file b.txt");
exit(0);
}
while (!feof(fp))
{
ch=fgetc(fp);
fputc(ch,fr);
if(!feof(fq)){
ch=fgetc(fq);
fputc(ch,fr);
}
}
while(!feof(fq)){
ch=fgetc(fq);
fputc(ch,fr);
}
rewind(fp);
rewind(fr);
while(!feof(fr)){
ch=fgetc(fr);
fputc(ch,fp);
}
fclose(fp);
fclose(fq);
fclose(fr);
return 0;
}