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

时间:2015-03-19 09:42:35

标签: c stdio

我正在尝试解析并转换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)

但没有区别。

我尝试过谷歌搜索,但很难找到保留返回值和检查EOF的示例。

1 个答案:

答案 0 :(得分:0)

这是应该有效的代码示例。 它为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有点限于解析输入字符串。当你给它一个空字符串时,你可能会得到意想不到的结果。