Salut,
j'essai de lire char / char dans un fichier
tant que c'est un blanc je saute,
le pb, la boucle est infini!!!
Code:
1
2
3
4
5 while ((caractere_lu=getc(file)) != ' ') { caractere_lu= fgetc(file); }
Version imprimable
Salut,
j'essai de lire char / char dans un fichier
tant que c'est un blanc je saute,
le pb, la boucle est infini!!!
Code:
1
2
3
4
5 while ((caractere_lu=getc(file)) != ' ') { caractere_lu= fgetc(file); }
Bonjour,
Le code que tu donnes ne fait pas ce que tu décris :
Le code fait ça :Code:
1
2
3 while ((caractere_lu=fgetc(file)) != ' ') { caractere_lu= fgetc(file); }
SI le caractère 0 est différent de ' ',
Alors, on met le caractère 1 dans caractère_lu
SI le caractère 2 est différent de ' ',
Alors, on met le caractère 3 dans caractère_lu
... et ainsi de suite.
Et au bout d'un moment, tu tombe sur le fin de fichier, fgetc renvoie donc EOF... est c'est la boucle infinie.
Une solution :
Code:
1
2
3
4
5
6
7
8
9
10 int c; c = fgetc(file); while(c != EOF) { if(c == ' ') { /* on traite le cas espace */ } else { /* on traite les autres cas */ } c = fgetc(file); }
Merci, je commence à comprendre;;;;
cela dit, j'ai besoin de lire un couple de caractere à la fois (on evitant les espaces)
si je fais comme tu dis, chaque caractere est considéré séparement, non???
Oui, tout à fait.
Mais tu peux aussi décider de lire un caractère dans la boucle while :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int c; c = fgetc(file); while(c != EOF) { if(c == ' ') { /* on lit le reste du couple */ int c2 = fgetc(file); /* mais on vérifie quand même que la fin de fichier n'a pas été atteinte :*/ if(EOF == c2) { break; } else { /* faire des choses avec c2 */ } } c = fgetc(file); }
Bien, Merci
J'ai une question compélementaire,
je cherche à faire " if (c !~ [^ATCG]) ... "
en d'autres termes, matcher le caractere lu avec une exp reg (autre que A,T,C ou G),,,
est il possible en C
merci
Il y a plusieurs méthodes pour faire ça en C, j'en voit au moins deux :
switch / case
Les regex, puissant, mais plus difficile d'accès.Code:
1
2
3
4
5
6
7
8
9
10 switch(c) { case 'A': case 'T': case 'G': case 'C': /* faire des choses */ break; default: /* faire d'autres choses */ }
http://nicolasj.developpez.com/articles/regex/
merci et treees bien tot,,,,je reviens au C après plusieurs années...