如果fscanf遇到换行符怎么办?

时间:2017-06-30 13:47:37

标签: c eclipse parsing config scanf

很抱歉,如果这是相当明显的,但我无法在任何地方找到它。我在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在触及换行符的情况下停在其轨道上,这样就不会搞砸了?

由于

0 个答案:

没有答案