C语言文件操作

想实现把文件里的字符转成大写在写回去,可是出现问题,无限循环。比如:文件内容为abcde运行程序后ABBBBBBBBBBBBBB.........b不知问题在那,还请各位... 想实现把文件里的字符转成大写在写回去,可是出现问题,无限循环。
比如:
文件内容为 abcde
运行程序后 ABBBBBBBBBBBBBB.........b
不知问题在那,还请各位前辈们帮帮我,谢谢了!
代码如下

int main(int argc, char* argv[])
{
FILE *fp = fopen("C:\\1.txt", "r+");

char c;
c = fgetc(fp);

while (!feof(fp))
{
fseek(fp, ftell(fp) - 1, SEEK_SET);
fputc(toupper(c), fp);
c = fgetc(fp);
}

fclose(fp);

return 0;
}
没出错,就是死循环,
展开
 我来答
mayadong7349
2011-02-24 · TA获得超过2356个赞
知道大有可为答主
回答量:362
采纳率:0%
帮助的人:669万
展开全部
今晚调试了很多遍,还是没发现我敢很确定的错误。
我的看法是:以r+方式打开文件时读取数据fgetc和写入数据fputc共用一个缓冲区,这样fputc如果不能及时将第二个字符b转换后写入文件,就会被fgetc捕捉到,这样就在第二个字符时形成死循环了。因为自己对文件缓冲区了解甚少,所以我的观点我也不能确定是否正确。
改了一下,运行结果正确,但是我不敢保证程序完全正确。其实涉及文件操作时,下面这两种方式更常见(网上示例代码很多):
一、读方式打开1.txt,写方式打开2.txt,把1.txt中的字母赋给一个char变量,然后将这个char变量转换为大写,再写到2.txt中。
二、先读,读完后再写
修改后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, char* argv[])
{
char c;
FILE *fp = fopen("C:\\1.txt", "r+");

if(NULL == fp)
{
perror("fopen failed");
exit(EXIT_FAILURE);
}

c = fgetc(fp);
while (!feof(fp))
{
if(islower(c) != 0)
{
fseek(fp, ftell(fp) - 1, SEEK_SET);
// 也可以用fseek(fp, -1, SEEK_CUR);替换
fputc(toupper(c), fp);
if(EOF == fflush(fp)) // 使数据及时写入文件而不是留在缓冲区
{
perror("fflush failed");
fclose(fp);
exit(EXIT_FAILURE);
}
}
c = fgetc(fp);
}

fclose(fp);
return 0;
}
如果我的回答有问题,可以HI我,我们接着讨论。

参考资料: http://hi.baidu.com/microtool/blog/item/636565e82db6d83a2df53492.html

军军106
2011-02-23 · TA获得超过453个赞
知道小有建树答主
回答量:1747
采纳率:0%
帮助的人:755万
展开全部
出错信息呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式