2017-10-10 15 views
0

J'essaye d'ignorer toutes les lignes commençant par un "#" mon code actuel semble fonctionner excepté quand il frappe le quatrième commentaire, il saute alors la première ligne de coordonnées dont j'ai besoin. La façon dont j'ai prouvé cela est avec deux images, une avec une entrée supplémentaire ajoutée après le commentaire et le programme fournit la sortie correcte, et la seconde avec l'entrée correcte mais la sortie incorrecte. (Je dois utiliser l'entrée sans supplément ligne). J'ai également joint la section de code où je rencontre le problème. Merci beaucoup pour votre aide!Dans C fgets et continuer sautent plus d'une ligne

enter image description here

sortie correcte

, nouvelle ligne incorrecte ajouté au fichier txt

enter image description here

Code:

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

Bienvenue dans Stack Overflow! Postez votre code en texte brut, pas une image. Voir https://stackoverflow.com/help/formatting pour l'aide à la mise en forme du code. – Barmar

+2

'fgets()' inclut la nouvelle ligne dans l'entrée. Donc 'strcmp (line," ") == 0' ne sera pas vrai pour une ligne vide, puisque' line' est '" \ n "' – Barmar

+1

Pourquoi utilisez-vous 'fscanf()' au lieu de 'sscanf() 'dans le troisième' sinon if'? – Barmar

Répondre

0

Vous avez une erreur dans la ligne

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; 

} 

Vous venez de scanner le paramètre LINE, puis de numériser une nouvelle ligne à la place des paramètres de numérisation de cette ligne.