Ignorer le retour à la ligne

Fermé
Sasori62 - 9 févr. 2014 à 23:35
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 10 févr. 2014 à 15:19
Bonsoir!

J'ai crée une petite fonction qui lit dans un fichier des caractères et les renvoie à une autre fonction.

Tout marche très bien sur la première ligne mais dès qu'il s'agit de passer à la deuxième je reçois un segmentation fault de la part de l'autre fonction parce qu'il veut des caracteres et non des espaces.

Le bout de fonction concerné:

"
char caractere;


fscanf(nomFichier,"%c",&(caractere));


return caractere;
"

et en gros le fichier dans lequel il lit est typiquement de cette forme :

"
00RRRJB0

0HRDZDC

DEFE215F

"

Ce qui pose donc problème c'est qu'après le 0 de la première ligne il ne lit pas le 0 de la deuxième ligne mais un "espace" et ca fait donc bugger le reste du programme.
Des solutions pour moi?

Merci beaucoup :)

2 réponses

BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909
10 févr. 2014 à 11:20
Hello,
A toi de vérifier le caractère lu avant de le retourner, non?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 10/02/2014 à 15:21
Salut,

Si les informations utiles de ton fichier sont seulement des lettres et des chiffres, tu peux utiliser la fonction isalnum pour vérifier si le caractère lu est alphanumérique (définie dans ctype.h) : http://www.cplusplus.com/reference/cctype/isalnum/

Avec un fichier contenant :


00RRRJB0

0HRDZDC

DEFE215F


Le code suivant :

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int lire_prochaine_donnee(FILE * pFile)
{
    int c;

    do
    {
        c = fgetc(pFile);
    } while (!(isalnum(c)) && (c != EOF));

    return c;
}

int main(void)
{
    FILE *pFile;
    int c = ' ';

    pFile = fopen("C:\\Documents and Settings\\Raoul\\Bureau\\Compilateurs\\eclipse\\Workspace\\CCM01\\Debug\\sasori.txt", "r");
    if (pFile == NULL )
    {
        perror("Unable to open file.");
        return EXIT_FAILURE;
    }
    while (c != EOF)
    {
        c = lire_prochaine_donnee(pFile);
        if (c != EOF)
            printf("%c", c);
    }
    fclose(pFile);

    return 0;
}


Donne ceci :

00RRRJB00HRDZDCDEFE215F


Dal
0