我有一个问题,但找不到有效的解决方案。这真的很容易,但是我不知道该怎么办。
我有一个带有几行的文件,例如:
\#comment
\#comment
icecream 5
pizza 10
pie 7
\#comment
tortillas 5
fajitas 5
Run Code Online (Sandbox Code Playgroud)
而且我希望我的程序只阅读不以开头的行#。
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");
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您需要读取配置文件,请使用正确的工具,而不是重新发明轮子。
while(!strcmp(first,"#")
Run Code Online (Sandbox Code Playgroud)
是错的。你想筛选出其中线与启动一个井号,而不是在那些它只不过是一个井号。另外,while(!feof(f))是错误的。此外,如果您要逐行阅读,为什么fscanf()在可以利用的情况下还要打扰fgets()呢?
总而言之,整个巨大while循环可以简化为以下形式:
char buf[0x1000];
while (fgets(buf, sizeof(buf), pf) != NULL) {
if (buf[0] == '#') continue;
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果不读取以 开头的行,就没有真正的方法可以到达下一行#。您所能做的就是读取该数据,但忽略它。
char ignore[1024];
fgets(ignore, sizeof(ignore), pf);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34685 次 |
| 最近记录: |