很抱歉,如果这是相当明显的,但我无法在任何地方找到它。我在c中编写配置文件解析器。这些文件看起来像是
PARAM1 VALUE1
PARAM2 VALUE2
等。我使用fscanf读取文件,一切顺利,但它需要能够抛出垃圾,如随机字符。除非随机字符具有不均匀的数字f(例如" sdjsdh sddfi sifsi"或者1字sch为" sjdasfh"),否则它会很好地完成此操作。在这种情况下,它使用下一行中的参数值作为"值"作为上述行"参数"中的最后一个字相关。代码足够聪明,可以抛出这个,但是下次调用fscanf时,它会使第一个未使用的值成为参数,实际上应该是一个值(即它认为VALUE1是参数而PARAM2是值)。我的fscanf命令如下所示:
fscanf(fp, "%s %s",temp_param, temp_value);
其中temp_value是值,temp_param是参数。
确定值的类型,然后根据允许的参数列表检查参数,如下所示:
for(int y = 0; y< NUMBER_OF_PARAMS; y++){
if (strcmp(temp_param, parameters[y])==0){
found = 1;
return y;
然后分配每个变量与参数[y]值相关联的结构:
if (goodparam == 0){
test->something= int_convert;
}else if (goodparam == 1){
test->anotherthing = int_convert;
}else if (goodparam == 2){
test->thing3 = int_convert;
}else if (goodparam == 3){
test->thingy = int_convert;
}else if (goodparam == 4){
strcpy(test->fakestring,temp_value);
}else if (goodparam == 5){
strcpy(test->otherstring,temp_value);
有没有办法让fscanf在触及换行符的情况下停在其轨道上,这样就不会搞砸了?
由于