首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个linux下的c程序,大家看看为啥结果不正确,该怎么解决

2012-02-09 
一个linux下的c程序,大家看看为啥结果不正确是书上的习题,要求列出一个目录下的文件和子目录,当skip变量为

一个linux下的c程序,大家看看为啥结果不正确
是书上的习题,要求列出一个目录下的文件和子目录,当skip变量为1时,跳过以.开头的文件,如果是目录,在目录名后打印一个星花。
运行结果很奇怪,是skip为1时,所有文件和目录都不打印星花,skip为其他值时都打印星花,大家看看怎么回事。


#include <dirent.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
int   my_double_ls(const   char   *name,int   skip);
main(int   argc,char   *argv[])
{
my_double_ls(argv[1],atoi(argv[2]));
}
my_double_ls(const   char   *name,int   skip)
{
struct   dirent   *d;
struct   stat   s;
DIR   *dp;
if((dp=opendir(name))==NULL)
return(-1);
while(d=readdir(dp))
{
if(d-> d_ino!=0)
if(skip==1   &&   d-> d_name[0]== '. ')
continue;
else
{
stat(d-> d_name,&s);
if(S_ISDIR(s.st_mode))
        printf( "%s   *\n ",d-> d_name);
else
printf( "%s   \n ",d-> d_name);
}
}

return(0);
}


[解决办法]
是skip为1时,所有文件和目录都不打印星花,skip为其他值时都打印星花

if(d-> d_ino!=0)
if(skip==1 && d-> d_name[0]== '. ')
continue;
else
{
stat(d-> d_name,&s);
if(S_ISDIR(s.st_mode))
printf( "%s *\n ",d-> d_name);
else
printf( "%s \n ",d-> d_name);
}
程序就是这么执行地

[解决办法]
lz看懂程序在问问题
[解决办法]
正常
[解决办法]
&& 具有短路行为. 当 && 的第一个逻辑表达成立, 才判断第二个.

如果第一个不成立, 直接就 else 了.

你这个情况. 应该 skip == 1时候, 啥都不干.

热点排行