新手学C语言:文件到底怎么用?

[复制链接]
查看11 | 回复4 | 2010-8-25 12:24:29 | 显示全部楼层 |阅读模式
C语言文件系统怎么用的?例如最简单的磁盘文件复制;
我参照书上写成这样:
#include
void main()
{
FILE *fpa,*fpb;
fpa=fopen("C:\\a.txt","r");
fpb=fopen("C:\\b.txt","w");
while(!feof(fpa))
fputc(fgetc(fpa),fpb);
fclose(fpa);
fclose(fpb);
}
这个就是把a文档复制奥b文档;
然后我再C盘下建了a.txt 和b.txt;在a里面写了几个字母;b是空的;
运行程序后怎么还是出现普通的黑色的那种输入(scanf)的界面,但是又输不进东西;再打开b,还是空的;a也没变
到底怎么做才能复制成功呢??
我也把a,b的位置改到C语言文件夹下,程序也相应改了地址,可还是没用??
我也把a,b改成dat等等格式,也没有用?
用的C语言是颖思设计网下载的Turbo C++ 3.0 2010汉化版的
一楼的试了两次,不行; 第一,C盘里应该是\\没错啊,第二,改了后还是出现黑色的键盘输入界面,还打不进东西
二楼的先留个记号?什么意思?会的话说啊,不会就算;
三楼的也不行啊;文件扩展名没省略;至于C盘保护,应该没有吧,我换了D,E还是不行;
有个疑问:为什么程序编译运行后会跳转到键盘输入的那个黑色的界面呢?而且键盘打的字符也输不进去啊;
额,刚刚可以了,应该是软件的问题吧;我又下载Turbo C 2.0 汉化版的,运行成功了;
不过在b.txt里面比a.txt里的东西多出了个y,y上面有两个点;这个是怎么回事?
还有Turbo C++ 3.0 汉化版的为什么会出问题啊?

回复

使用道具 举报

千问 | 2010-8-25 12:24:29 | 显示全部楼层
编译器不同,都多少有些缺陷,我空间就列了一个,这里不说之所以多了那个特殊字符,我想应该是文件末尾的EOF(文件结束标志,可理解为系统加的标志文件结束的不可见字符)所致,feof函数将文件结束标志EOF也当成a.txt的一个字符,所以就算a.txt是空文件,while循环也会执行一次将a.txt中的EOF复制到b.txt(楼主可以试一下,我试过了,也出现那个特殊字符)要避免这个问题,可以这样写#includevoid main(){FILE *fpa,*fpb;char c;fpa=fopen("C:\\a.txt","r");fpb=fopen("C:\\b.txt","
回复

使用道具 举报

千问 | 2010-8-25 12:24:29 | 显示全部楼层
fpa=fopen("C:\\a.txt","r");fpb=fopen("C:\\b.txt","w");改为fpa=fopen("C:\\a.txt","rt");fpb=fopen("C:\\b.txt","wt");之所以出现看不懂的字符是因为它是按二进制方式读写的,"w"改为"wt"就可以了。 t代表文本模式。

回复

使用道具 举报

千问 | 2010-8-25 12:24:29 | 显示全部楼层
可能有两个问题:1.你的C盘被保护了,不允许程序访问,你换到D盘下试试。2.是不是你的系统已经默认省略文件的扩展名了,如果是这样的话,你建的两个文件实际上就变成了“a.txt.txt”,"b.txt.txt"于是就找不到文件了
回复

使用道具 举报

千问 | 2010-8-25 12:24:29 | 显示全部楼层
你的程序主体没有问题。把这两句改一下:pa=fopen("C:\\a.txt","r");fpb=fopen("C:\\b.txt","w");改成:pa=fopen("C:\/a.txt","r");fpb=fopen("C:\/b.txt","w");
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行