免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7713 | 回复: 20
打印 上一主题 下一主题

百思不得其解,万思不得其解<在线等待中........> [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-04 19:40 |只看该作者 |倒序浏览
一段代码,功能简单如下
#define filename "abc"
if (   (fopen(filename ,"r")    !=  NULL    )
  return 1;     // 第一处返回
else{

  if(   (fopen(filename ,"w+")    !=  NULL    )
    return 1; //第二处返回

  else
    return 0;
}

现在,文件"abc"不存在
在第几处返回 ? 我的环境 tc3.0 用f8 逐语句查看
运行200多次, "w+" 改成"w" 又改成 "a+"
每次运行到第二次fopen 就跳到 第一处返回,为何?
另: 如何不用fopen 测试文件是否存在?

论坛徽章:
0
2 [报告]
发表于 2004-04-04 19:42 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

不好意思,上面有点补充   
是 FILE * fprt ;

两处 fopen 均为 if (   ( fptr = fopen(filename ,mode) )   != NULL  )

论坛徽章:
0
3 [报告]
发表于 2004-04-04 19:43 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

FILE * fptr;

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-04-04 19:47 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

希望把代码写完整了,并用code功能编辑。
这样才好给你看。
还有标题。没看到置顶的帖子吗?

论坛徽章:
0
5 [报告]
发表于 2004-04-04 19:56 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

唉~~
不好意思,  不过我觉得这段代码不用写完整的,就是一个很简单的意思
,我用中文写出来好吗

如果   以fopen 的读模式打开一个文件返回 NULL //测试文件是否存在
     第一处返回

否则  {

  如果 以fopen 的"w+" 模式打开文件返回NULL //不存在,创建之
    第二处返回
}
问题: 文件不存在 , 在第二次fopen 后,立即跳转到了第一处返回

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-04-04 20:02 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

对这样的代码,如果把别人给你测试,
还要自己加main函数,你认为有几个人会这样做?

论坛徽章:
0
7 [报告]
发表于 2004-04-04 20:13 |只看该作者

百思不得其解,万思不得其解<在线等待中........>



  1. #include<stdio.h>;
  2. #include<stdlib.h>;
  3. #define filename "abc"
  4. #define rmode "r"
  5. #define wmode "w+" //or "a+"  or "w"

  6. FILE *fptr;
  7. void main(void ){
  8.       if(    (fptr = fopen(filename , rmode))    != NULL   ){
  9.              return 1;  // return 1
  10.       }else{
  11.             if(    (fptr = fopen(filename , wmode))   != NULL   ){ //open 2
  12.                    return 1; // return 2
  13.             }else{
  14.                   return 0;
  15.             }
  16.       }
  17.       exit(0);
  18. }

  19. 问题: 文件不存在 , 运行完open 2 后跳转至 return 1
复制代码

论坛徽章:
0
8 [报告]
发表于 2004-04-04 20:42 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

楼主自己的代码有问题吧,两处都是 return 1;

论坛徽章:
0
9 [报告]
发表于 2004-04-04 20:48 |只看该作者

百思不得其解,万思不得其解<在线等待中........>


  1. #include<stdio.h>;
  2. #include<stdlib.h>;
  3. #define filename "abc"
  4. #define rmode "r"
  5. #define wmode "w+" //or "a+"  or "w"

  6. FILE *fptr;
  7. void main(void ){
  8.       if(    (fptr = fopen(filename , rmode))    ==NULL   ){
  9.              return 1;  // return 1
  10.       }else{
  11.             if(    (fptr = fopen(filename , wmode))   == NULL   ){ //open 2
  12.                    return 1; // return 2
  13.             }else{
  14.                   return 0;
  15.             }
  16.       }
  17.       exit(0);
  18. }

  19. 应该是==NULL,失败才返回
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-04-04 20:48 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

我无法单步执行,
所以无法判断会出现你那种情况。
不过你的main返回void,而你return 1什么的,
难道编译时没有告警信息吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP