Problème de logique algorithmique (language C

Résolu/Fermé
cap'tain sheeps - 14 avril 2011 à 11:11
 cap'tain sheeps - 14 avril 2011 à 16:43
Bonjour,
J'ai un gros problème que je n'arrive pas à résoudre et qui est plutôt bisarre :

j'aimerais à partir d'un fichier écris avec des lignes du type :

0| | | |006|100|+S| |R|0.5|BNA/1|RT.3/Z26|RT.3/Z28|RT.3/Z30|


récupérer dans un tableau d'enregistrement les nom des connecteurs et contacts en enlevant les "|" , "/", et les infos du début.
J'ai donc fais ce code (j'ai seulement gardé la partie qui pose problème) :



while(fgetc (fichierFil) != 10)//10 étant l'entier associé au caractère "retour à la ligne"
            {
                //on saute les renseignements qui ne nous interresent pas
                while(iSaut < 10)
                {
                    carac = fgetc (fichierFil);
                    if(carac == 124)//124 étant l'entier associé au caractère "|"
                    {
                        iSaut++;
                    }
                }
                //on récupere les connexion dans le tableau tableauConnections
				if( testPremiereBoucle == 1)
				{
					carac = fgetc (fichierFil);
					testPremiereBoucle = 0;
				}
				while(carac != 47)//47 étant l'entier associé au caractère "/"
				{
					tableauConnections[i].nomConnecteur = carac;
					fprintf(fichierTest,"\n %d nom du connecteur : %c", i, tableauConnections[i].nomConnecteur);
					carac = fgetc (fichierFil);
				}
				carac = fgetc (fichierFil);
				while(carac != 124)
				{
					tableauConnections[i].contact = carac;
					fprintf(fichierTest,"\n %d nom du contact : %c", i, tableauConnections[i].contact);
					carac = fgetc (fichierFil);
				}
				i++;
            }





Le problème est que dans mon fichierTest, il ne veut pas prendre la première lettre du connecteur des connections mis à part la première (dans cette exemple, il ne me donnera pas le R, le R puis le R :
Voyez par vous meme le contenu de mon fichier test:


0 nom du connecteur : B
0 nom du connecteur : N
0 nom du connecteur : A
0 nom du contact : 1
1 nom du connecteur : |
1 nom du connecteur : T
1 nom du connecteur : .
1 nom du connecteur : 3
1 nom du contact : Z
1 nom du contact : 2
1 nom du contact : 6
2 nom du connecteur : |
2 nom du connecteur : T
2 nom du connecteur : .
2 nom du connecteur : 3
2 nom du contact : Z
2 nom du contact : 2
2 nom du contact : 8
3 nom du connecteur : |
3 nom du connecteur : T
3 nom du connecteur : .
3 nom du connecteur : 3


J'ai essayé plusieurs choses mais c'est encore plus bisarre :
Si je saute un caractère à toutes les connections en changeant la condition du if en 1 :


if(1)
				{
					carac = fgetc (fichierFil);
					testPremiereBoucle = 0;
				}


Le fichier test me donne ca :

0 nom du connecteur : B
0 nom du connecteur : N
0 nom du connecteur : A
0 nom du contact : 1
1 nom du connecteur : T
1 nom du connecteur : .
1 nom du connecteur : 3
1 nom du contact : Z
1 nom du contact : 2
1 nom du contact : 6
2 nom du connecteur : T
2 nom du connecteur : .
2 nom du connecteur : 3
2 nom du contact : Z
2 nom du contact : 2
2 nom du contact : 8
3 nom du connecteur : T
3 nom du connecteur : .
3 nom du connecteur : 3


quelqu'un pourrait-il m'expliquer ce que mon programme a contre ces R? Parce que ca fait un petit moment que je suis sur ce problème ...
Merci d'avance !

Sheeps.


3 réponses

cap'tain sheeps
14 avril 2011 à 16:23
Je pensais que le titre en aurait captivé plus d'un ...
Je ne peux vraiment pas avancer tant que je n'ai pas cette partie du code alors UP !
0
Quand tu es passé une première fois dans la boucle, tu viens de lire le | qu'il y a entre 1 et RT.3
ensuite, tu remontes au while :
while(fgetc (fichierFil) != 10)

Ce while lit aussi un caractère ; il lit donc le R sans le mettre dans carac.
La suite est logique...
tu peux t'en tirer simplement :
while((carac=fgetc (fichierFil)) != 10)
0
cap'tain sheeps
14 avril 2011 à 16:43
pfff et 3h pour ca ...
j'étais trop habitué à faire des copier/coller de mon "carac = fgetc (fichierFil)" meme quand ca servait à rien de le stocker que j'étais persuadé de l'avoir fais ici aussi.

Ben alors la ! Toi ! Je te remercie de tout mon coeur !
0