如何用C语音修改文件内容

yuye2133 2014-02-28 09:47:41
我想将一个文件中的小写字母全部换成大写字母,应该怎么做呢?
我用的方法是先用fgetc()读取字符,然后判定是否是小写字母,如果是小写字母转换成大写字母,然后用fputc()写回文件,但是没有效果。求指点。感激不尽。

#include<stdio.h>
int isXiao(char c)
{
if(c>='a'&&c<='z')
return 1;
return 0;
}
void main()
{
char ch;
FILE *fp;
if((fp=fopen("TestFile/org.dat","r+"))==NULL) /*打开文件*/
{
/*打开文件失败*/
printf("open error");
return;
}
ch = fgetc(fp); /*读取文件*/
while(ch!=EOF)
{
if(isXiao(ch))
{
ch += 32;
fputc(ch,fp);
}
ch = fgetc(fp);
}
fclose(fp);
}
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-02-28
  • 打赏
  • 举报
回复
提醒:无fopen(...,"...b")不用fseek! 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
initgraph 2014-02-28
  • 打赏
  • 举报
回复
if(isXiao(ch)) { ch -= 32; fseek(fp, -1,SEEK_CUR); fputc(ch,fp); fseek(fp, 0,SEEK_CUR); }
rendason 2014-02-28
  • 打赏
  • 举报
回复
可以在写入之前使用fseek(fp, -1,1);
rendason 2014-02-28
  • 打赏
  • 举报
回复
因为你在文件中读取一个字符后文件位置向后移动了一个字符,再写的时候是把下一个字符替换了,你应该把文件位置向前移动一个字符
躺着睡的蜗牛 2014-02-28
  • 打赏
  • 举报
回复
1. 如果没记错,fgetc执行后,文件操作的位置已经移位了,需要使用fseek移回去,然后再写入数据。 2. 小写转大写可以使用strupr。 3. 建议把文件所有数据都读出来,使用strupr转大写,再把文件操作位置移动到开头, 再把转换后的数据写入。
yuye2133 2014-02-28
  • 打赏
  • 举报
回复
引用 4 楼 u013797412 的回复:
if(isXiao(ch)) { ch -= 32; fseek(fp, -1,SEEK_CUR); fputc(ch,fp); fseek(fp, 0,SEEK_CUR); }
谢谢指点,还帮我改出个错误。
yuye2133 2014-02-28
  • 打赏
  • 举报
回复
引用 6 楼 ForestDB 的回复:
如果是对一个文件又读又写,注意读写的位置。 建议搞两个文件,一个读,一个写,简单点。 FILE * src = fopen("org.dat", "r"); FILE * dst = fopen("org.dat.tmp", "w"); char c; while ((c = fgetc(src)) != EOF) { if (islower(c)) c += 32; fputc(c, dst); } fclose(src); fclose(dst); rename("org.dat.tmp", "org.dat");
谢谢指点,这种方法可以。
ForestDB 2014-02-28
  • 打赏
  • 举报
回复
如果是对一个文件又读又写,注意读写的位置。 建议搞两个文件,一个读,一个写,简单点。 FILE * src = fopen("org.dat", "r"); FILE * dst = fopen("org.dat.tmp", "w"); char c; while ((c = fgetc(src)) != EOF) { if (islower(c)) c += 32; fputc(c, dst); } fclose(src); fclose(dst); rename("org.dat.tmp", "org.dat");

69,373

社区成员

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

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