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 在解析输入字符串方面有些局限。当你给它一个空字符串时,你可能会得到意想不到的结果。
我正在尝试解析和转换 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 在解析输入字符串方面有些局限。当你给它一个空字符串时,你可能会得到意想不到的结果。