如何在c中标记整行输入?

如何在c中标记整行输入?,c,input,cmd,C,Input,Cmd,我需要解析cmd中的一行,如下所示 "SOME WHITE SPACE" "var_name" "SOME WHITE SPACE" "var_value" "SOME WHITE SPACE" 我对fgets的看法是: fgets(input_buf,MAX_LINE_LENGTH,stdin); 并尝试这样标记: sscanf(input_buf,"%s", var_buff); sscanf(input_buf+strlen(var_buff),"%s", var_val_buff)

我需要解析cmd中的一行,如下所示

"SOME WHITE SPACE" "var_name" "SOME WHITE SPACE" "var_value" "SOME WHITE SPACE"
我对fgets的看法是:

fgets(input_buf,MAX_LINE_LENGTH,stdin);
并尝试这样标记:

sscanf(input_buf,"%s", var_buff);

sscanf(input_buf+strlen(var_buff),"%s", var_val_buff);

sscanf(input_buf+(strlen(var_buff)+strlen(var_val_buff)+2),"%s", rest_line_buff);

if (strlen(rest_line_buff) == 0)

    printf("error in usage\n");

我没有得到正确的值,因为空格的数量可能会有所不同。如何标记输入行?

使用扫描生成器:或下载标记器库。

使用扫描生成器:或下载标记器库。

默认情况下,scanf系列的所有函数聚合并跳过多个空白字符:

sscanf(input_buf," %s %s", var_buff, var_val_buf);

我不确定格式字符串中的前导空格是否绝对必要,但我可以肯定,如果输入行开头没有实际空格,则这是正确的事件。

默认情况下,scanf系列的所有函数聚合并跳过多个空格字符:

sscanf(input_buf," %s %s", var_buff, var_val_buf);
我不确定格式字符串中的前导空格是否严格必要,但我可以肯定,如果输入行开头没有实际空格,这是正确的事件。

使用,如下面的示例程序所示:

#include <stdio.h>
#include <string.h>

int main ()
{
  char sampleInput[] ="foo bar foo1 bar1 foo2 bar2";
  char *token;
  char *whiteSpace = " \t\n\f\r\v";
  int isVariable = 1;

  token = strtok(sampleInput, whiteSpace);
  while (token != NULL)
  {
     if (isVariable) 
        printf("Variable = %s\n", token);
     else 
        printf("Value = %s\n\n", token);
     isVariable = isVariable ? 0 : 1;
     token = strtok(NULL, whiteSpace);
  }
  return 0;
}
使用,如下面的示例程序所示:

#include <stdio.h>
#include <string.h>

int main ()
{
  char sampleInput[] ="foo bar foo1 bar1 foo2 bar2";
  char *token;
  char *whiteSpace = " \t\n\f\r\v";
  int isVariable = 1;

  token = strtok(sampleInput, whiteSpace);
  while (token != NULL)
  {
     if (isVariable) 
        printf("Variable = %s\n", token);
     else 
        printf("Value = %s\n\n", token);
     isVariable = isVariable ? 0 : 1;
     token = strtok(NULL, whiteSpace);
  }
  return 0;
}

在这里使用
strtok()
strtok\u r()
似乎很自然。你为什么决定反对它?

在这里使用
strtok()
strtok\u r()
似乎很自然。为什么您决定反对它?

您是否将“一些空白”、“变量名”、“一些空白”、“变量值”和“一些空白”作为命令行参数传递??不,我在命令行中循环了用户输入的许多值,这不是一个参数。感谢您将“一些空白”、“变量名”、“一些空白”、“变量值”、“一些空白”作为命令行参数传递给
??不,我在命令行中循环了用户输入的许多值,这不是一个参数。谢谢