我遇到了问题,但我找不到有效的解决方案。这很容易,但我不明白该怎么做。
我有一些包含某些行的文件,例如:
\#comment
\#comment
icecream 5
pizza 10
pie 7
\#comment
tortillas 5
fajitas 5
我希望我的程序只读取不以#
开头的行。
FILE *pf;
char first [20], second [20];
pf = fopen("config.conf", "r");
if (pf)
{
while (! feof(pf))
{
fscanf(pf, "%s \t ", first);
while(!strcmp(first,"#")){ `HERE I NEED JUMP TO NEXT LINE`
fscanf(pf, "%s \t ", first);
}
fscanf (pf, "%s \t ", second);
printf("Food: %s \t Cost: %s \n", first, second);
}
fclose(pf);
}
else
printf( "Errore nell'aprire config.conf\n");
答案 0 :(得分:4)
如果不读取以#
开头的行,就没有真正的方法可以到达下一行。您可以做的就是读取该数据,但忽略它。
char ignore[1024];
fgets(ignore, sizeof(ignore), pf);
答案 1 :(得分:4)
如果您需要阅读配置文件,请use the right tool instead of reinventing the wheel.
while(!strcmp(first,"#")
错了。您希望过滤掉以哈希符号开头的行,不那些只是哈希符号的行。此外,{ {1}}错了。此外,如果您逐行阅读,那么当您可以利用while(!feof(f))
时,为什么还要使用fscanf()
呢?
总而言之,整个巨大的fgets()
循环可以简化为:
while
答案 2 :(得分:3)
通过应用%*[^\n]
格式说明符
fscanf(pf, "%*[^\n]");
答案 3 :(得分:1)
您可能希望使用strstr查找“#”。