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

一个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时候, 啥都不干.