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

标签 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++ 类(class)以来,我从来没有用 C 编写过,也没有写过 C++。

最佳答案

去掉

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

[^,\n] 将扫描直到遇到 , 并将扫描的值存储在您的 char 数组 中。

PS: fgets() 带有换行符。

关于c - 如何使用 fgets()/sscanf() 从终端解析三个逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292506/

相关文章:

c - 下行数据之间的 GSM AT 命令响应

c - 查找整数数组中的最小数字

c - 为什么 scanf() 会导致此代码中的无限循环?

使用 fscanf() 将整数复制到数组中。在 C

c - 扫描句子中字母之间的数字

c - 如何创建 fscanf 格式字符串来接受空格和逗号 (,) 标记化

更改链表中结构中的 int 值

c - klish - 动态变量和完成

c++ - 在文本文件上调用 ReadFile,得到奇怪的(日语?)字符

c - (C) 将std in解析成链表,无限循环