我有以下getopt代码。一切都符合预期的'?'。我已经使用下面的用法语句添加了getopt代码。我在'?'里面也有一个打印声明不打印,确保它不匹配。我不知道为什么它与'?'不匹配。
这是我在终端试过的。
./ bmptool - ?
static char usage[] = "Usage: bmptool [-s scale | -r degree | -f ] [-o output_file] [input_file] \n";
while ((c = getopt(argc, argv, "s:r:fo:")) != -1)
switch (c) {
//scale image
case 's':
//check if user already entered this case
if(sFlag > 0)
{
fprintf(stderr,"Error! s case used multiple times!\n");
fprintf(stderr, usage, argv[0]); //print usage statement
exit(-1);
}
sFlag = 1; //scale image
checkNum(optarg); // check if user entered integer
scale = atoi(optarg); //optarg string convert to int
//make sure user entered positive int
if (scale < 1)
{
fprintf(stderr,"'%d' is not a postive integer. To scale an image a positive "
"number must be entered.\n", scale );
fprintf(stderr, usage, argv[0]); //print usage statement
exit(-1);
}
countCase+=2;
break;
//rotate image
case 'r':
//check if user already entered this case
if(rFlag > 0)
{
fprintf(stderr,"Error! r case used multiple times!\n");
fprintf(stderr, usage, argv[0]); //print usage statement
exit(-1);
}
rFlag = 1; //rotate image
checkNum(optarg); // check if user entered integer
rotation = atoi(optarg); //optarg string convert to int
//make sure user entered int that is a multiple of 90
if (rotation % 90 != 0 )
{
fprintf(stderr,"'%d' is not multiple of 90. To rotate an image a number that is a multiple "
"of 90 must be entered.\n", rotation );
fprintf(stderr, usage, argv[0]); //print usage statement
exit(-1);
}
countCase+=2;
break;
//flip image
case 'f':
//check if user already entered this case
if(fFlag > 0)
{
fprintf(stderr,"Error! f case used multiple times!\n");
fprintf(stderr, usage, argv[0]); //print usage statement
exit(-1);
}
fFlag = 1; //flip image
countCase++;
break;
//output to output file given by user
case 'o':
//check if user already entered this case
if(oFlag > 0)
{
fprintf(stderr,"Error! o case used multiple times!\n");
fprintf(stderr, usage, argv[0]); //print usage statement
exit(-1);
}
oFlag = 1;
outPutFileName = (char*) malloc(strlen(optarg));
strcpy(outPutFileName, optarg);
countCase += 2;
break;
case '?':
printf("in here\n");
err = 1;
break;
}
if (err || optind + 1 < argc) {
fprintf(stderr, "Error!\n");
fprintf(stderr, usage, argv[0]);
exit(-1);
}