Ignorer le retour à la ligne
Sasori62
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
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 :)
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
-
Hello,
A toi de vérifier le caractère lu avant de le retourner, non?
-
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