读取文件,怎么进行追加?

风吟xqy 2020-06-05 08:29:28


这是题目,然后下面是我现在写的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
FILE *fp1;
char ch;
int a=0;
if ((fp1=fopen("C:\\wenjian/alpha.txt","a+"))==NULL)
{
printf("File open error!\n");
exit(0);
}
while (!feof(fp1))
{
ch=fgetc(fp1); //从fp1所指的文件中读取一个字符
if (ch !=EOF)
{
if (ch>='a'&&ch<='z')
{
ch -=32;
}
if (ch=='\n')
{
a++;
}
printf("%c",ch);
}
}
printf("\na=%d",a);
if (fclose(fp1)) //关闭文件
{
printf("Can not close the file!\n");
exit(0);
}
return 0;
}


最后是运行结果,应该要的是asdfASDF这样子
...全文
177 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
风吟xqy 2020-06-08
  • 打赏
  • 举报
回复
引用 8 楼 自信男孩的回复:
[quote=引用 6 楼 风吟xqy 的回复:]
[quote=引用 4 楼 自信男孩的回复:]打开方式就不能是a+了,因为这样你是读取不到数据的,因为此时文件指针是指向文件末尾的。

解决办法是可读可写的形式打开文件,比如"r+",然后把所有数据读取到内存,此时文件指针正好指向文件末尾,然后把小写转大写直接往文件里写就是了。最后关闭文件。

有一点需要明白,读取文件,将数据都读取到内存后,文件指针此时正好指向文件末尾。

老哥,还是写不成。[/quote]
发你的代码出来,是不是你的逻辑问题或者读文件时就出错了。[/quote] 写对了,逻辑出问题了
jena_wy 2020-06-08
  • 打赏
  • 举报
回复
打开方式改成"a+"就好了。
自信男孩 2020-06-08
  • 打赏
  • 举报
回复
引用 6 楼 风吟xqy 的回复:
[quote=引用 4 楼 自信男孩的回复:]打开方式就不能是a+了,因为这样你是读取不到数据的,因为此时文件指针是指向文件末尾的。

解决办法是可读可写的形式打开文件,比如"r+",然后把所有数据读取到内存,此时文件指针正好指向文件末尾,然后把小写转大写直接往文件里写就是了。最后关闭文件。

有一点需要明白,读取文件,将数据都读取到内存后,文件指针此时正好指向文件末尾。

老哥,还是写不成。[/quote]
发你的代码出来,是不是你的逻辑问题或者读文件时就出错了。
风吟xqy 2020-06-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
    FILE *fp1,*fp2;
    char ch;
    int a=0;
    if ((fp1=fopen("alpha.txt","r"))==NULL)
    {
        printf("File open error!\n");
        exit(0);
    }
    if((fp2=fopen("alpha.txt","a"))==NULL)
	{	
		printf("打开文件dest.txt失败!\n");
		exit(0);
	}
    while (!feof(fp1))
    {
        ch=fgetc(fp1);       //从fp1所指的文件中读取一个字符
        if (ch !=EOF)
        {
            if (ch>='a'&&ch<='z'&&ch!='\n')
            {
                ch -=32;
                fputc(ch,fp2);
            }
        }
        
    }
    if (fclose(fp1))                                 //关闭文件
    {
        printf("Can not close the file!\n");
        exit(0);
    }
    if (fclose(fp2))                                 //关闭文件
    {
        printf("Can not close the file!\n");
        exit(0);
    }
    return 0;
}
风吟xqy 2020-06-08
  • 打赏
  • 举报
回复
引用 11 楼 Tryagain2006 的回复:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
    FILE *fp1, *fp2;
    int ch;
    int a=0;
    if ((fp1=fopen("d:alpha.txt", "r+"))==NULL)
    {
        printf("File1 open error!\n");
        exit(0);
    }
    if ((fp2=fopen("d:temp.txt", "w"))==NULL)
    {
        printf("File2 open error!\n");
        exit(0);
    }
    while ( !feof(fp1) )
    {   
        if ( (ch= fgetc(fp1)) != EOF )	//从fp1所指的文件中读取一个字符
        {
            if ( ch>='a' && ch<='z' )
            {	ch -= 'a'-'A';
            }
            if (ch=='\n')
            {	a++;
            }
            fputc(ch, fp2);				//写入文件2 
        }
    }
    printf("\na=%d",a);

    freopen("d:/chensy/2019c/alpha.txt", "a+", fp1);	//重新打开文件1 
	freopen("d:/chensy/2019c/temp.txt", "r",fp2);		//重新打开文件2
    while ( !feof(fp2) )
    {
        ch = fgetc(fp2);       	//从fp2所指的文件中读取一个字符
        if ( ch != EOF )
        {	fputc(ch, fp1);		//追加到文件1中 
        }
	}
    if ( fclose(fp1) )                               //关闭文件1
    {
        printf("Can not close the file1!\n");
        exit(0);
    }
    if ( fclose(fp2) )                                 //关闭文件2
    {
        printf("Can not close the file2!\n");
        exit(0);
    }
    return 0;
}
请看看这个程序如何。
就是这个feel,谢谢
Tryagain2006 2020-06-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
FILE *fp1, *fp2;
int ch;
int a=0;
if ((fp1=fopen("d:alpha.txt", "r+"))==NULL)
{
printf("File1 open error!\n");
exit(0);
}
if ((fp2=fopen("d:temp.txt", "w"))==NULL)
{
printf("File2 open error!\n");
exit(0);
}
while ( !feof(fp1) )
{
if ( (ch= fgetc(fp1)) != EOF ) //从fp1所指的文件中读取一个字符
{
if ( ch>='a' && ch<='z' )
{ ch -= 'a'-'A';
}
if (ch=='\n')
{ a++;
}
fputc(ch, fp2); //写入文件2
}
}
printf("\na=%d",a);

freopen("d:/chensy/2019c/alpha.txt", "a+", fp1); //重新打开文件1
freopen("d:/chensy/2019c/temp.txt", "r",fp2); //重新打开文件2
while ( !feof(fp2) )
{
ch = fgetc(fp2); //从fp2所指的文件中读取一个字符
if ( ch != EOF )
{ fputc(ch, fp1); //追加到文件1中
}
}
if ( fclose(fp1) ) //关闭文件1
{
printf("Can not close the file1!\n");
exit(0);
}
if ( fclose(fp2) ) //关闭文件2
{
printf("Can not close the file2!\n");
exit(0);
}
return 0;
}

请看看这个程序如何。
风吟xqy 2020-06-06
  • 打赏
  • 举报
回复
引用 1 楼 xws245925587的回复:
那就先读取文件大小,然后一点一点读文件,找到小写字母,然后转成大写字母追加到文本的后面
大佬,写不成
风吟xqy 2020-06-06
  • 打赏
  • 举报
回复
引用 4 楼 自信男孩的回复:
打开方式就不能是a+了,因为这样你是读取不到数据的,因为此时文件指针是指向文件末尾的。

解决办法是可读可写的形式打开文件,比如"r+",然后把所有数据读取到内存,此时文件指针正好指向文件末尾,然后把小写转大写直接往文件里写就是了。最后关闭文件。

有一点需要明白,读取文件,将数据都读取到内存后,文件指针此时正好指向文件末尾。
老哥,还是写不成。
自信男孩 2020-06-06
  • 打赏
  • 举报
回复
打开方式就不能是a+了,因为这样你是读取不到数据的,因为此时文件指针是指向文件末尾的。

解决办法是可读可写的形式打开文件,比如"r+",然后把所有数据读取到内存,此时文件指针正好指向文件末尾,然后把小写转大写直接往文件里写就是了。最后关闭文件。

有一点需要明白,读取文件,将数据都读取到内存后,文件指针此时正好指向文件末尾。
风吟xqy 2020-06-06
  • 打赏
  • 举报
回复
引用 2 楼 Simple-Soft的回复:
你原文件内容是啥?你代码中好像也没有写文件啊
原文件就是adfghjjkl
风吟xqy 2020-06-06
  • 打赏
  • 举报
回复
引用 4 楼 自信男孩的回复:
打开方式就不能是a+了,因为这样你是读取不到数据的,因为此时文件指针是指向文件末尾的。

解决办法是可读可写的形式打开文件,比如"r+",然后把所有数据读取到内存,此时文件指针正好指向文件末尾,然后把小写转大写直接往文件里写就是了。最后关闭文件。

有一点需要明白,读取文件,将数据都读取到内存后,文件指针此时正好指向文件末尾。
好的,我试一试
Simple-Soft 2020-06-05
  • 打赏
  • 举报
回复
你原文件内容是啥?你代码中好像也没有写文件啊
xws245925587 2020-06-05
  • 打赏
  • 举报
回复
那就先读取文件大小,然后一点一点读文件,找到小写字母,然后转成大写字母追加到文本的后面

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧