scanf() - 获取字段计数并检查 EOF

scanf() - getting field count and checking for EOF

我正在尝试解析和转换 csv,并认为我会尝试学习 c,因为我目前正在学习这门语言。

int main()
{
  char * s1, * s2;
  int field_count = 0;
  while ((field_count = scanf("%20[^;];%s", s1, s2)) != EOF)
  {
    printf("%d\n", field_count));
    if (field_count != 2)
      continue;
  }
  return 0;
}

我不明白为什么无论每行有多少字段,field_count 总是 0,而且循环也永远不会结束。

我尝试将 while 子句更改为:

while ((field_count = scanf("%s", s1)) != EOF)

但这没什么区别。

我试过谷歌搜索,但很难找到保留 return 值并检查 EOF 的示例。

这是一个应该有效的代码示例。 它为 s1 和 s2 分配一个存储缓冲区。 此代码要求字段的长度最多为 99 个字符。

int main(int argc, char * argv[])
{
  char s1[100], s2[100];
  int field_count = 0;
  while ((field_count = scanf("%99[^;];%99[^\n]", s1, s2)) >= 0)
  {
    printf("%d '%s' '%s'\n", field_count, s1, s2);
  }
  return 0;
}

Scanf 在解析输入字符串方面有些局限。当你给它一个空字符串时,你可能会得到意想不到的结果。