#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
/*Two long-options:"help" && "version".*/
const struct option long_options[]={
{"help",0,NULL,'h'},
{"version",0,NULL,'v'},
{NULL,0,NULL,0}
};
int main(int argc,char *argv[]){
int n_on=0,e_on=0;
int strstart;
int value;
char charb;
int nl=1;
/*Analysis parameters of the program.*/
while((value=getopt_long(argc,argv,"enhvE",long_options,NULL))!=-1){
switch(value){
case 'e':
e_on=1;
break;
case 'n':
n_on=1;
break;
case 'E':
e_on=0;
break;
case 'h':
system("man echo");
return 0;
case 'v':
printf("Version:0.1\nBulit by SnakeWind\nJune,29,2008\n");
return 0;
case '?':
printf("Parameter no found.\nPlease check you input.\n");
return 1;
}
}
/*Look for the start point of string.*/
for(strstart=1;*argv[strstart]=='-';strstart++);
/*String output.*/
for(strstart=1;strstart<argc;strstart++){
if(*argv[strstart]==45)
continue;
for(int i=0;*(argv[strstart]+i)!='\0';i++){
charb=*(argv[strstart]+i);
if(charb=='\\' && e_on==1){
i++;
charb=*(argv[strstart]+i);
if(charb>='0' && charb<='9'){
i+=2;
charb=*(argv[strstart]+i-2)*64+*(argv[strstart]+i-1)*8+*(argv[strstart]+i)*1;
printf("%c",charb);
}
else if(charb=='a') {printf("\a");}
else if(charb=='b') {printf("\b \b");}
/*
else if(charb=='c') {nl=0;}*/
else if(charb=='f') {printf("\n\b");}
else if(charb=='n') {printf("\n");}
else if(charb=='r') {printf("\r");}
else if(charb=='t') {printf("\t");}
else if(charb=='\\') {printf("\\");}
else if(charb=='\"') {printf("\"");}
else printf("%c",charb);
}
printf("%c",charb);
}
printf(" ");
}
if(n_on==0) printf("\n");
}
---------------------------------------------英俊潇洒的分隔线-----------------------------------------------
这个是我的Blog上出现的代码。首先,这个在Windows下是无法通过编译的;其次,大部分与本贴的主题是没有关系的。
注意标成红色的地方,这个是唯一的关键。我在这里需要找到第一个首字节不是‘-’的命令行参数,因而使用了这个for语句。for语句并没有循环执行任何代码段,只是不断增加变量strstart的值,直到我认为足够为止。这就是我举的例子了^^
顺便回楼主,for用于延时也是可行的.但是我个人趋向于使用sleep()函数。
还有用在case后面,就是你的switch用了default执行某项动作,但是又要在某种输入时不做任何反应时用。例子,暂时还没有,就不举了哈~
[[it] 本帖最后由 snakealpha 于 2008-8-27 19:32 编辑 [/it]]