我试图解析一个命令行参数,该参数反过来将在一个case语句中执行一个关联的switch。当我解析一个整数参数(如下面的代码所示)时,关联的case将正确执行。当我试图解析一个字符串,如"CPU",我没有得到正确的输出。
功能代码(解析整数,例如,4的参数给出hello的正确输出):
#include <stdio.h>
int main(int argc, char *argv[]) {
char execution_mode = atoi (argv[1]);
switch (execution_mode)
{
case (4) :
printf("Hello");
getchar();
break;
case (8) :
printf("Goodbye");
getchar();
break;
default:
printf("Error! execution mode is not correct");
getchar();
break;
}
return 0;
}我试图解析一个字符串,例如参数CPU:
#include <stdio.h>
int main(int argc, char *argv[]) {
typedef enum MODE { CPU, OPENMP } MODE;
MODE execution_mode = (char)argv[1];
switch (execution_mode)
{
case (CPU) :
printf("Hello");
getchar();
break;
case (OPENMP) :
printf("Goodbye");
getchar();
break;
default:
printf("Error! execution mode is not correct");
getchar();
break;
}
return 0;
}发布于 2019-04-13 16:48:30
在回答了这个问题的用户的帮助下,我通过使用strcmp找到了一个实用的解决方案,如下所示。我还添加了一些错误检查,以确保在命令行中输入了足够的参数。
#include <stdio.h>
int main(int argc, char *argv[]) {
//Ensure there are enough arguments
if (argc < 2)
{
printf("Error: not enough arguments");
exit(1);
}
typedef enum MODE { CPU, OPENMP, CUDA, ALL } MODE;
MODE execution_mode = (MODE)argv[1];
//Compare string with command-line arguments
if (strcmp("CPU", execution_mode) == 0)
{
//selects CPU case
execution_mode = CPU;
}
else if (strcmp("OPENMP", execution_mode) == 0)
{
//selects OPENMP case
execution_mode = OPENMP;
}
else
{
printf("invalid arg");
}
//Switch statement
switch (execution_mode)
{
case (CPU) :
printf("CPU MODE SELECTED");
getchar();
break;
case (OPENMP) :
printf("OPENMP MODE SELECTED");
getchar();
break;
default:
printf("Error: execution mode is not correct");
getchar();
break;
}
return 0;
}发布于 2019-04-13 15:38:05
不能将字符串转换为这样的枚举。您所做的只是将指向字符串的指针转换为char。但失败了。
避免这种情况的另一种方法(除了将第一个参数与strcmp进行比较)是为枚举提供一个字符值:
typedef enum { CPU='C', OPENMP='O' } MODE;现在您可以选择第一个参数的第一个字母并转换它:
MODE execution_mode = (MODE)argv[1][0];这些信当然各不相同。当然,检查argc>1以确定argv[1]是否有效。
如果要进行完全字符串匹配,则除了使用strcmp之外别无选择。
const char *execution_mode = argv[1];
if (strcmp(execution_mode,"CPU")==0)
{
// do something
}
else if (strcmp(execution_mode,"OPENMP")==0)
{
// do something else
}https://stackoverflow.com/questions/55667112
复制相似问题