如何使用fgets()/ sscanf()从终端解析三个逗号分隔的字符串

时间:2015-02-03 06:13:50

标签: c scanf

阅读Parsing a comma separated file using C using fscanf()后,我取得了一些进展,但我仍然难以解析这个问题。

控制台的输入最多可达三个字符串,以逗号分隔,例如“String1,String2,String3”或“String1,String2”或“String1”

我可以在完成这项工作后处理输入验证。我需要将此输入解析为三个单独的char *字符串。

到目前为止我已经

char arg1[9] = "UNDEF";
char arg2[17] = "UNDEF";
char arg3[33] = "UNDEF";
char inputBuffer[100];

char* end = "END";

while(strcmp(arg1, end) != 0)
{
  printf("ENTER INSTRUCTION:");
  fgets(inputBuffer, sizeof(inputBuffer), stdin);
  sscanf(inputBuffer, "%[^,\n]s,%[^,\n]s,%s" arg1,arg2,arg3);
  printf("arg1: %s\narg2: %s\narg3: %s\n", arg1,arg2,arg3);
}

但是当我从终端输入"test,test,test"时,它会输出

arg1: test
arg2: UNDEF
arg3: UNDEF
很明显,我做错了什么,但我不知道...这对我来说是个新领域;我从未用C语言编写过,而且自从我三年前的两个学期的c ++课程以来,我还没有编写过C ++。

1 个答案:

答案 0 :(得分:3)

摆脱s

sscanf(inputBuffer, "%[^,\n],%[^,\n],%s", arg1,arg2,arg3);

[^,\n]会一直扫描到,,然后将扫描的值存储在char array中。

PS:fgets()附带换行符。