c语言中的遍历函数 c语言遍历算法
C语言遍历所有文件的函数!
#include stdio.h
目前创新互联公司已为上1000+的企业提供了网站建设、域名、网站空间、网站托管、服务器托管、企业网站设计、江都网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
#include dos.h
#include errno.h
#include io.h
#include dirent.h
#include dir.h
#include string.h
#include sys\stat.h
#include "pm03a.h"
void main(int argc,char* argv[])
{
//printf("Number %d\n",ConfirmFileAttrib(argv[1]));
GetDirectory(argv[1]);
printf("\nSearch Over.\n");
}
//------------------------------------------------------------------
//pm03a.h
//------------------------------------------------------------------
void GetDirectory(char *DirectoryName);
int ConfirmFileAttrib(char* filename);
char *GetCurrentPath();
char* GetFullFileName(char *filename);
char *WillDeleteFile(char *FileName);
//--------------------------------------------------------
//--------------- 获得文件属性 ---------------------------
//--------------------------------------------------------
int ConfirmFileAttrib(char* filename)
{
int temp=0;
int attrib=(_rtl_chmod(filename,0));
if(attrib==-1)
{
switch(errno)
{
case ENOENT:
//printf("%s Path or file not found.\n",filename);
temp=0;
break;
case EACCES:
//printf("Permission denied.\n");
temp=-1;
break;
default:
//printf("Error number: %d", errno);
temp=-2;
break;
}
}
else
{
if(attrib FA_RDONLY)
{
temp=1;
//printf("%s is read-only.\n", filename);
}
if(attrib FA_HIDDEN)
{
temp=2;
//printf("%s is hidden.\n", filename);
}
if(attrib FA_SYSTEM)
{
temp=3;
//printf("%s is a system file.\n", filename);
}
if(attrib FA_DIREC)
{
temp=4;
//printf("%s is a directory.\n", filename);
}
if (attrib FA_ARCH)
{
temp=5;
//printf("%s is an archive file.\n", filename);
}
}
return temp;
}
//--------------------------------------------------------
//--------------------------------------------------------
//--------------- 获取目录流 -----------------------------
//--------------------------------------------------------
void GetDirectory(char *DirectoryName)
{
DIR* Directory_Point;
struct dirent *entry;
bool DirControl;
if((Directory_Point=opendir(DirectoryName))==NULL)
{
printf("Error opening directory!\n");
return;
}
else
{
if(strcmp(DirectoryName,"..")==0)
{
return;
}
if(strcmp(DirectoryName,".")==0)
DirControl=true;
else
DirControl=false;
chdir(DirectoryName);
//char *filename=DirectoryName;
//int k=creat(strcat(filename,".txt"),S_IWRITE);
while(bool(entry=readdir(Directory_Point)))
{
if(ConfirmFileAttrib(entry-d_name)==5) // 确定为文件属性
{
// 文件过滤
WillDeleteFile(entry-d_name);
}
if(ConfirmFileAttrib(entry-d_name)==4) // 确定为目录属性
{
if(strcmpi(entry-d_name,"..")==0||strcmpi(entry-d_name,".")==0)
{
continue;
}
else
{
//printf("\n%s is direct\n\n",entry-d_name);
GetDirectory(entry-d_name);
}
}
}
if(!DirControl==true)
chdir("..");
closedir(Directory_Point);
}
}
//--------------------------------------------------------
//--------------------------------------------------------
//---------- 判断文件类型以备过滤 ------------------------
//--------------------------------------------------------
char* GetFullFileName(char *filename)
{
char *FullFilename=GetCurrentPath();
if(strlen(FullFilename)=3)
{
strcat(FullFilename,filename);
}
else
{
strcat(FullFilename,"\\");
strcat(FullFilename,filename);
}
return FullFilename;
}
char *GetCurrentPath()
{
char path[1024]="";
strcpy(path, "X:\\"); /* fill string with form of response: X:\ */
path[0] = 'A' + getdisk(); /* replace X with current drive letter */
getcurdir(0, path+3); /* fill rest of string with current directory */
return path;
}
char *WillDeleteFile(char *FileName)
{
int len;
for(len=strlen(FileName);len=0;len--)
{
if(FileName[len]=='.')
break;
}
char* Retname;
int s=-1;
for(int i=len;i=strlen(FileName);i++)
{
Retname[s+=1]=FileName[i];
}
int i=-1;
if(Retname[1]=='~')i=0;
if(strcmpi(Retname,".bak")==0)i=0;
if(strcmpi(Retname,".obj")==0)i=0;
if(strcmpi(Retname,".tds")==0)i=0;
if(strcmpi(Retname,".dcu")==0)i=0;
if(strcmpi(Retname,".tmp")==0)i=0;
if(strcmpi(Retname,".ilk")==0)i=0;
if(strcmpi(Retname,".pch")==0)i=0;
if(strcmpi(Retname,".pdb")==0)i=0;
if(strcmpi(Retname,".tlb")==0)i=0;
if(strcmpi(Retname,".idb")==0)i=0;
if(strcmpi(Retname,".pdb")==0)i=0;
if(strcmpi(Retname,".r$p")==0)i=0;
if(strcmpi(Retname,".OBR")==0)i=0;
if(strcmpi(Retname,".mbt")==0)i=0;
if(strcmpi(Retname,".mrt")==0)i=0;
if(strcmpi(Retname,".csm")==0)i=0;
if(i==0)
{
remove(GetFullFileName(FileName));
printf("%s delete\n",GetFullFileName(FileName));
}
return Retname;
}
c语言如何用函数指针利用循环结构遍历多个函数
#include 纤橡察stdio.h
#define TYPE int
// 下面是加减乘除 4 个函数
TYPE add(TYPE a, TYPE b){return a+b;}
TYPE sub(TYPE a, TYPE b){return a-b;}
TYPE muti(TYPE a, TYPE b){return a*b;}
TYPE div(TYPE a, TYPE b){return a/b;}
int main(int argc, char *argv[])
{
// 函数指针数组,一共有 4 四个元素,分别是:
// 加减乘除 4 个函数的函数指针
// 你可以自己再添加其他函数,而不毁茄用修改代码。
TYPE (*functions[])(TYPE, TYPE) = {add,sub,muti,div};
// 函数指针数组中的元素个数,这里是 4 个。
unsigned int n = sizeof(functions)/sizeof(functions[0]);
// 要进行运算的数字
TYPE a = 10, b = 5 , result;
int i=0;
for(i=0; in; i++)
{// 调用函数指针数组如绝里面的所有函数。
result = functions[i](a,b);
printf("%d\n", result);
}
return 0;
}
C语言中,对二维数组所有元素遍历一次,有几种循环方式?为什么?
1、行优先和列优先
有三种循环方式:FOR循环、DO-WHILE循环 、WHILE循环,字符串之间的比较,它有专门的字符串比较函数:strcmp函数。
2、不能用运算关系符
扩展资料:
二维数组A[m][n],这是祥洞一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先隐宴厅顺序”存储时则元素a[i][j]的地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t
按“列优先顺序”存储时,地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t
存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。
参考资料来灶隐源:
百度百科-二维数组
文章名称:c语言中的遍历函数 c语言遍历算法
文章起源:http://azwzsj.com/article/ddpdpeg.html