一个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时候, 啥都不干.
是书上的习题,要求列出一个目录下的文件和子目录,当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时候, 啥都不干.