免费注册 查看新帖 |

Chinaunix

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

请大家帮助看看这个简单程序为什么不对? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-12 15:34 |只看该作者 |倒序浏览
编译通过后,无论第二个参数是/ 或者/opt ,打印的都是 the dir is .  

请大家看看!


#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    DIR *dp;
    struct dirent *dirp;

    if (argc != 2)
    {
        printf("a single argument(the dir name )is required!!");
        exit(1);
    }

    if ((dp = opendir(argv[1])) == NULL)
    {
        printf("can not open the dir %s" ,argv[1]);
        exit(1);
    }

    if ((dirp = readdir (dp)) != NULL)
    {
        printf("the dir is %s\n" , dirp->d_name);
    }

    closedir(dp);
    exit(0);

   
}

论坛徽章:
0
2 [报告]
发表于 2006-09-12 15:48 |只看该作者
每个目录下都有'.', '..' 目录,你只取了第一个 当然是这个结果了

if ((dirp = readdir (dp)) != NULL)
替换为
for ( ; (dirp = readdir(dp)) != NULL; )
看看

论坛徽章:
0
3 [报告]
发表于 2006-09-12 15:49 |只看该作者
本来就是对的,是你自己认为是错的

论坛徽章:
0
4 [报告]
发表于 2006-09-12 15:50 |只看该作者
if -- > while

论坛徽章:
0
5 [报告]
发表于 2006-09-12 15:52 |只看该作者
while ( ( dirp = readdir( dp ) ) != NULL )
      printf( "%s"    , dirp->d_name  );
closedir(dp);

论坛徽章:
0
6 [报告]
发表于 2006-09-12 15:54 |只看该作者

  1. if ((dirp = readdir (dp)) != NULL)
复制代码

这里只进行了一次readdir调用.你只调用一次当然就只有一个输出了.

应当是进行while循环.

while ((dirp = readdir(dp)) != NULL)
{
    如果是目录
        递归访问该目录
    如果是文件并且不是.或..
        输出文件名
}

论坛徽章:
0
7 [报告]
发表于 2006-09-12 16:05 |只看该作者
书上写的很清楚啊

论坛徽章:
0
8 [报告]
发表于 2006-09-12 16:10 |只看该作者
这次丢脸丢大了,我没看清楚

论坛徽章:
0
9 [报告]
发表于 2006-09-12 16:14 |只看该作者
原帖由 yinian9826 于 2006-9-12 16:10 发表
这次丢脸丢大了,我没看清楚

这有什么丢脸的,谁都会犯错的!
重要的是现在明白就行了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2006-09-12 16:16 |只看该作者
唉!先是出来不会用 printf 和 scanf 的,现在居然又出来一个分不清 while 和 if 的~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP