C 使用if/else语句检查枚举参数是否存在
我的当前代码有一个小问题,在尝试继续程序之前,我试图检查参数是否已传递给enumC 使用if/else语句检查枚举参数是否存在,c,enums,arguments,C,Enums,Arguments,我的当前代码有一个小问题,在尝试继续程序之前,我试图检查参数是否已传递给enum enum arg {argName, sineArg, sampleArg, argC}eargs; int main(int argc, char *argv[]){ long samplingRate = atol(argv[sampleArg]); float sineFreq = atof(argv[sineArg]); if (argC < eargs ){
enum arg {argName, sineArg, sampleArg, argC}eargs;
int main(int argc, char *argv[]){
long samplingRate = atol(argv[sampleArg]);
float sineFreq = atof(argv[sineArg]);
if (argC < eargs ){
printf("Usage: sineFreq\tsamplingRate\n");
}else{}
}
enum arg{argName,sineArg,sampleArg,argC}eargs;
int main(int argc,char*argv[]){
长采样光栅=原子(argv[sampleArg]);
float sineFreq=atof(argv[sineArg]);
如果(argC
代码可以很好地编译,尽管在没有参数的情况下运行时,程序返回“Segmentation fault:11”,而不是我要打印到控制台的用法消息。您必须在访问
argv[…]之前进行检查。
编辑:检查本身也是错误的(eargs
未定义;您应该编写
int main(int argc, char *argv[]) {
if (argc < argC) /* --> you should change you naming conventions! */
return EXIT_FAILURE;
long samplingRate = atol(argv[sampleArg]);
intmain(intargc,char*argv[]){
如果(argc您应该更改命名约定*/
返回退出失败;
长采样光栅=原子(argv[sampleArg]);
您需要将argC
更改为argC
,在if语句中…c区分大小写!!!您的使用检查是针对与传递的命令行参数数量无关的eargs
进行的。无论传递多少个参数,eargs
始终是0
在使用任何命令行参数之前,也应该进行检查。将条件放在main()
的开头:
#包括
#包括
枚举arg{argName,sineArg,sampleArg,argC}eargs;
int main(int argc,char*argv[]){
/*如果(argc<3)在这里是明确的*/
如果(argc
在使用
printf()
long samplingRate = atol(argv[sampleArg]);
访问argv[2],这是未定义的行为,因为您没有提供足够的arg(只有argv[0]=程序名,argv[1]=NULL表示argv[]的结束).我已经快速地修改了代码,编译工作正常,但它仍然只是将相同的消息返回到控制台。您是说“main”中的“argc”声明吗?我刚刚将其全部更改为相同的('argc')它仍然向控制台返回相同的消息我想我误解了最后一个enum参数的用法,您基本上只需检查enum中最后一个参数的索引中有多少个参数?是的。如果您没有为enum分配任何值,则它们从0
开始。它的工作原理就像您用:enum>定义它一样{argName=0,sineArg=1,sampleArg=2,argC=3}eargs;
但是如果以后插入更多元素enum,则argC
将不同。例如,如果这样做:enum arg{argName,sineArg,newArg,sampleArg,argC}eargs;
那么argC
现在将是4。
long samplingRate = atol(argv[sampleArg]);