2017-10-10 78 views
0

我想跳过以“#”开头的所有行我的当前代码似乎正在工作,除非它命中第四个评论,然后跳过第一行坐标我需要的。我已经证明这是两张图片,其中一张在注释之后添加了额外的输入,并且程序提供了正确的输出,另一张输入了正确的输入但输出不正确(我没有额外的输入线)。 我也附上了我遇到问题的代码部分。非常感谢你的帮助!在C fgets和继续正在跳过多条线

enter image description here

正确的输出,不正确添加新行txt文件

enter image description here

代码:

a = 0 ;                      
while(fgets(line, sizeof(line),fp) != NULL)             
{ 
    if (line[0] == '#') 
    { 
    continue; 
    } 
    else if (MAX_X==0 && MAX_Y==0) 
    { 
     if ((sscanf(line,"%d %d", &MAX_X, &MAX_Y)==2) && MAX_X>0 && MAX_X <= 1000 && MAX_Y>0 && MAX_Y<=1000){ 
      continue; 
     } 
    }else if (NUM_PT==0) 
    { 
     if ((sscanf(line, "%d", &NUM_PT)==1)&& NUM_PT>0 && NUM_PT<=1000) 
      continue; 
    } 
    else if((fscanf(fp,"%d %d", &X_COORD[a], &Y_COORD[a]))&& X_COORD[a]>=0 && X_COORD[a]<=MAX_X && Y_COORD[a]>=0 && Y_COORD[a]<= MAX_Y) 
    { 
     a++; 
     continue; 

    } 
    else if(strcmp(line, "")==0) 
    { 

     return -1; 

    } 
} 
+2

欢迎来到Stack Overflow!将您的代码发布为纯文本,而不是图片。有关代码格式帮助,请参阅https://stackoverflow.com/help/formatting。 – Barmar

+2

'fgets()'包含输入中的换行符。因此'strcmp(line,“”)== 0'对于一个空行是不正确的,因为'line'是'“\ n”' – Barmar

+1

为什么你用'fscanf()'而不是'sscanf() '在第三个'else if'中? – Barmar

回答

0

你要排队一个错误

else if((fscanf(fp,"%d %d", &X_COORD[a], &Y_COORD[a]))&& X_COORD[a]>=0 && X_COORD[a]<=MAX_X && Y_COORD[a]>=0 && Y_COORD[a]<= MAX_Y) 
{ 
    a++; 
    continue; 

} 

您刚刚扫描了LINE参数,然后扫描了一条新行,而不是此行的扫描参数。