c语言有段关于文件的程序总是出错,帮忙解释一下

#include"stdio.h"#include"stdlib.h"//#include"conio.h"main(){FILE*fp;charname[50],mod... #include "stdio.h"
#include "stdlib.h"
//#include "conio.h"
main(){
FILE *fp;
char name[50],mode[10];
int i=0;
while(1){
printf("请输入文件名: \n");
gets(name);
printf("请输入打开方式: \n");
gets(mode);
if((fp=fopen(name,mode))!=NULL){ //代码编译的时候没问题,就这行出的错,不知道什么原因
printf("打开成功: \n");
}
else
printf("打开失败,请重新输入");
}
}
展开
 我来答
强哥JX2010
2011-08-20 · TA获得超过514个赞
知道答主
回答量:36
采纳率:0%
帮助的人:44.3万
展开全部

你的程序我测试过了,执行成功了。

fopen()的第一个参数为文件路径和名称,必须指明有效路径,比如C:\\Test.txt ;

               第二个参数为打开方式:

                  "r"—读方式,若果文件不存在或找不到,则打开失败;

                  "w"—写入一个空文件,若果给定文件存在,则将覆盖原有内容;

                 "a"—打开文件以便在文件末尾写入或者创建不存在的文件;

                 "r+"—以读写方式打开文件(文件必须存在);

                 "w+"—以读写方式打开一个空文件,如果文件存在,将覆盖原内容;

                 "a+"—以读取和附加内容方式打开文件;如果文件不存在则创建。

因此对于你的程序,输入方式应为:比如

C:\\test.txt

a

这样在C盘就可以看到0字节的test.txt

下面是我的程序运行结果截图:

hujing9988
2011-08-20 · TA获得超过236个赞
知道答主
回答量:261
采纳率:0%
帮助的人:202万
展开全部
貌似是因为:name字符数组的大小定义成了50,你在gets的时候,输入的文件名肯定<50个字符,但是数组中后面的元素是确实存在的,所以在执行fopen的时候,带入的name是一个长度为50的字符串,但是你建立好的文件名肯定<50,所以两个字符串不匹配。同理 mode 也是同样的原因
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ouying64
2011-08-20 · 贡献了超过354个回答
知道答主
回答量:354
采纳率:0%
帮助的人:140万
展开全部
我按大哥的建议,另外我想用gets()代替可是 编译时程序运行时总是如果好用的话,再从c与c 的差别入手找一下.比如,c里面必须先将定义都一
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bd4cf2a31
2011-08-20 · TA获得超过332个赞
知道小有建树答主
回答量:333
采纳率:100%
帮助的人:349万
展开全部

首先你输入的文件地址格式要正确:例,c:\\a.txt      这样的地址是正确的。

还有你输入的文件打开方式有要求的:如果地址正确,但文件不存在 ,用读的方式打开(r),则会提示:打开失败,请重新输入;但是,用写的方式(w)就OK!

如果输入的地址不对,不管什么方式打开都会是:打开失败,请重新输入

你可以按如下输入实验:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式