【问题标题】:C - How to take string as argumentsC - 如何将字符串作为参数
【发布时间】:2023-03-27 18:34:01
【问题描述】:

我有这段代码可以接受用户输入并用它做一些事情。

int main ()
{
    char key[] = "quit";
    char buffer[80];
    do {
        printf ("CMD> ");
        scanf ("%s",buffer);
    } while (strcmp (key,buffer) != 0);
    printf ("Bye.\n");
    return 0;
}

我想集成其他命令。 所以我要求用户输入一个类似字符串的命令:

CMD > xxx -a 32

他给了我一个字符串“xxx -a 32”。我怎样才能将它们作为论据?

所以我可以使用 case 来调用具有以下参数的函数:

switch(xxx) {  // first arg

   case (-a)  :  // second arg
      callAFunction(32);  // third arg 
      break;
}

【问题讨论】:

  • 你不能在运行时给出变量名。 switch 中的变量必须在程序中声明,你可以在运行时获取它的值。

标签: c arrays string arguments


【解决方案1】:

正如 ameyCU 指出的那样,您不能那样使用switch,因为您需要在编译时拥有与switch 一起使用的变量名。但是,您可以使用strcmp 来比较用户在运行时输入的字符串参数(xxx)。

要将用户输入拆分为多个参数,您可以尝试strtok,类似这一行(假设恰好输入了三个参数,并且还没有错误检查)。

    printf ("CMD> ");
    // scanf ("%s",buffer);   // better use fgets
    fgets( buffer, sizeof( buffer ), stdin );

    char *args[3] = { NULL };
    char *pch;

    pch = strtok (buffer," ");
    int i = 0;
    while (pch != NULL)
    {
        args[i++] = pch;
        pch = strtok (NULL, " ");
    }

    for( i = 0; i < 3; i++ )
    {
        if( args[i] != NULL )
        {
            printf( "args[%d] = %s\n", i, args[i] );
        }
    }

【讨论】:

    【解决方案2】:

    您可以按照以下格式执行一件事: scanf("%s %c %d",arg1,&arg2,&arg3); 但是在这里你也没有在 arg1 中完成存储的字符串不是变量,所以你不能把它作为 switch 命令的参数。尝试为此目的使用 arg1

    【讨论】:

    • 提供正确代码的示例对提问者很有帮助。
    猜你喜欢
    • 2012-07-30
    • 2018-04-12
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多