2015-11-29 1 views
1

J'ai un code pour lire une ligne à partir d'une entrée de fichier. Mon objectif est de savoir si une ligne est vide (soit \ n \ t ou des espaces), de passer la ligne et de passer à la ligne suivante. J'ai un problème à faire ça. Mon code a fonctionné si la ligne est seulement une "clé d'entrée [\ n]", cependant, si la ligne se compose juste de \ t (tab) ou d'espaces, cela ne fonctionne pas. Voici le code. Quelqu'un peut-il m'aider à ignorer si la ligne est complètement blanche? MerciIgnorer les espaces blancs dans l'impression

while(!feof(input)){ 

    fgets(word,1000,input); 

    if((strcmp(word,"\n")==0) || (strcmp(word,"\t\n")==0) || (strcmp(word," \n")==0)){ 
     continue; 
    } 
+0

vous pouvez vous référer D & R livre de programmation question similaire est donnée Je suppose que –

Répondre

2

Vous pouvez utiliser isspace() en boucle:

int is_whitespace(char *word) { 
    size_t spaces = 0; 
    size_t i = 0; 
    size_t slen = strlen(word); 

    for (i = 0; i< slen; i++) 
     if (isspace((int)word[i])) spaces++; 

    return spaces == slen; 
} 

et vous serez alors en mesure de:

while(fgets(word,1000,input)) { 

    if (is_whitespace(word)) 
     continue; 
} 

En outre, la condition de la boucle est fausse. Voir Why is “while (!feof (file))” always wrong?


Comme suggusted par @chux, il peut être simplifié et l'appel à strlen() peuvent être évités:

int is_whitespace(char *word) { 

    while (isspace((unsigned char) *word)) 
    word++; 

    return *word == 0; 
    } 
+0

merci. mais isspace inclura \ t et \ n? –

+0

Oui. Il comprend tous les espaces. Manuel dit: * vérifie les caractères de l'espace blanc. Dans les locales "C" et "POSIX", ce sont: espace, form-feed ('\ f'), newline ('\ n'), retour chariot ('\ r'), onglet horizontal ('\ t'), et l'onglet vertical ('\ v'). * –

+0

Désolé @blue Moon mais il ignore toujours la ligne qui se compose uniquement de \ t (onglets) –

1
char ch; 
if(1 != sscanf(word, " %c", &ch)){ 
    continue; 
}