begin process at 2012 05 30 02:06:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[C] Problème avec fgets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C] Problème avec fgets

samedi 13 mai 2006 à 21:08:43 | [C] Problème avec fgets

GTFY

Bonjour,

J'ai un problème et j'ai dans l'idée que ça vient de la fonction fgets.
Je dois lire deux fichiers en parallèle qui contiennent des BDD dont les valeurs des champs sont séparées par des ";".

La première ligne contient les informations relatives aux champs (nom et type), et j'arrive à les lire et afficher, le tout mis en forme à ma sauce. Donc jusqu'ici, pas de soucis, je lis et utilise les deux fichiers en parallèle (du moins la première ligne de chacun).

En revanche, ça part en sucette après.

Au moins pour tester, je lis la seconde ligne de chaque fichier, fgets stock tout ça dans deux tab différents, puis je relis chaque tab afin d'isoler les champs qui m'intéresse. Celà fonctionne quand je traite un seul des deux fichier. En revanche, quand je traite les deux, ça déconne ! Quand j'affiche les deux champs qui m'intéressent (un de chaque fichier), tout se mélange un peu.
Par exemple, là, il m'affiche correctement le champs que je veux pour la seconde table, mais l'affichage correspondant à la première table me renvoie le champs suivant de la seconde table...
Bref, là, je m'arrache pas mal les cheveux, et étant débutant, je me dis que je passe très certainement à côté d'un truc évident... mais quoi ?!
Voilà mon code... si jamais une bonne âme peut me venir en aide...
[code]
#include <stdio.h>

int main(int argc, char** argv)
{
	int i,j;
	char ligne1[2048],ligne2[2048];;
	int nbattributs=0;
	char attribut[255][255];
	char mot1[1][255],mot2[1][255];
	int lettre=0;
	int champs_1,champs_2;
	
	FILE *table1;
	table1 = fopen(argv[1], "rt");

	FILE *table2;
	table2 = fopen(argv[2], "rt");
	
	// Lecture de la première ligne afin de récupérer le format de la table
	
	fgets(ligne1,500,table1);
	fgets(ligne2,500,table2);
	i=0;
	j=0;
	printf("\n");
	printf("FORMAT DES TABLES :\n\n");
	printf("Table %s :\n  ",argv[1]);
	while(ligne1[i])
	{
		if(ligne1[i-1]!= 32 && ligne1[i] != 59) // Affiche si la lettre n'est pas un ";" précédé d'un espace
		{
			if(lettre == 0) printf("%d  ",j);
			printf("%c",ligne1[i]);
			if(ligne1[i] != 32) attribut[nbattributs][lettre] = ligne1[i];
			lettre++;
		}
		if(ligne1[i-1]== 32 && ligne1[i] == 99) // Type c
		{
			printf(" [chaine de caractères]");
		}
		if(ligne1[i-1]== 32 && ligne1[i] == 101) // Type e
		{
			printf(" [entier]");
		}
		if(ligne1[i] == 59) // Saut de ligne si ";"
		{
			printf("\n  ");
			nbattributs++;
			lettre=0;
			j++;
		}
	
		i++;
	}
	printf("\n");

	i=0;
	j=0;
	lettre=0;
	printf("Table %s :\n  ",argv[2]);
	while(ligne2[i])
	{
		if(ligne2[i-1]!= 32 && ligne2[i] != 59) // Affiche si la lettre n'est pas un ";" précédé d'un espace
		{
			if(lettre == 0) printf("%d  ",j);
			printf("%c",ligne2[i]);
			if(ligne2[i] != 32) attribut[nbattributs][lettre] = ligne2[i];
			lettre++;
		}
		if(ligne2[i-1]== 32 && ligne2[i] == 99) // Type c
		{
			printf(" [chaine de caractères]");
		}
		if(ligne2[i-1]== 32 && ligne2[i] == 101) // Type e
		{
			printf(" [entier]");
		}
		if(ligne2[i] == 59) // Saut de ligne si ";"
		{
			printf("\n  ");
			nbattributs++;
			lettre=0;
			j++;
		}
	
		i++;
	}
	printf("\n");

	// Demande des champs sur lesquels on souhaite faire l'équi-jointure

	printf("Indices des champs sur lesquels on opère l'équi-jointure :\n");
	printf("  Sur %s :\n",argv[1]);
	scanf("%d",&champs_1);
	printf("  Sur %s :\n",argv[2]);
	scanf("%d",&champs_2);
	printf("\n");

	// Parcours des tables

	fgets(ligne1,500,table1);
	i = 0;
	nbattributs = 0;
	lettre = 0;
	while(ligne1[i])
	{
		if(ligne1[i] != 59)
		{
			mot1[nbattributs][lettre] = ligne1[i];
			lettre++;
		}
		if(ligne1[i] == 59) // Changement de mot si ";"
		{
			nbattributs++;
			lettre = 0;
		}
		i++;
	}


	fgets(ligne2,500,table2);
	j = 0;
	nbattributs = 0;
	lettre = 0;
	while(ligne2[j])
	{
		if(ligne2[j] != 59)
		{
			mot2[nbattributs][lettre] = ligne2[j];
			lettre++;
		}
		if(ligne2[j] == 59) // Changement de mot si ";"
		{
			nbattributs++;
			lettre = 0;
		}
		j++;
	}

	printf("Dernier %s : %s\n",argv[1],mot1[champs_1]);	
	printf("Dernier %s : %s\n",argv[2],mot2[champs_2]);

}

[/code]
samedi 13 mai 2006 à 21:10:28 | Re : [C] Problème avec fgets

GTFY

Désolé, j'ai foiré le post...
On édite comment ?
samedi 13 mai 2006 à 22:56:21 | Re : [C] Problème avec fgets

SAKingdom

Membre Club
Les admins le peuvent je crois. Sinon, tu n'a qu'a reposter ton code correctement sur cette même question (à la suite de ce que je dit. Pas de nouvelle question).

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 13 mai 2006 à 23:17:04 | Re : [C] Problème avec fgets

GTFY

Le truc, c'est que je ne connais pas la balise utilisée pour poster les codes :(
samedi 13 mai 2006 à 23:19:27 | Re : [C] Problème avec fgets

SAKingdom

Membre Club
Tu n'a qu'a reprendre ton code et le poster ici en mettant les retours à la ligne au endroit aproprié.

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 13 mai 2006 à 23:30:19 | Re : [C] Problème avec fgets

satellite34

oula, joli le post, je cherche justement un moyen d 'eviter ca pour mon forum.lol


@+;
satellite34

dimanche 14 mai 2006 à 09:27:51 | Re : [C] Problème avec fgets

GTFY

include int main(int argc, char** argv) { int i,j; char ligne1[2048],ligne2[2048]; int nbattributs=0; char attribut[255][255]; char mot1[1][255],mot2[1][255]; int lettre=0; int champs_1,champs_2; FILE *table1; table1 = fopen(argv[1], "rt"); FILE *table2; table2 = fopen(argv[2], "rt"); // Lecture de la première ligne afin de récupérer le format de la table fgets(ligne1,500,table1); fgets(ligne2,500,table2); i=0; j=0; printf("\n"); printf("FORMAT DES TABLES :\n\n"); printf("Table %s :\n ",argv[1]); while(ligne1[i]) { if(ligne1[i-1]!= 32 && ligne1[i] != 59) // Affiche si la lettre n'est pas un ";" précédé d'un espace { if(lettre == 0) printf("%d ",j); printf("%c",ligne1[i]); if(ligne1[i] != 32) attribut[nbattributs][lettre] = ligne1[i]; lettre++; } if(ligne1[i-1]== 32 && ligne1[i] == 99) // Type c { printf(" [chaine de caractères]"); } if(ligne1[i-1]== 32 && ligne1[i] == 101) // Type e { printf(" [entier]"); } if(ligne1[i] == 59) // Saut de ligne si ";" { printf("\n "); nbattributs++; lettre=0; j++; } i++; } printf("\n"); i=0; j=0; lettre=0; printf("Table %s :\n ",argv[2]); while(ligne2[i]) { if(ligne2[i-1]!= 32 && ligne2[i] != 59) // Affiche si la lettre n'est pas un ";" précédé d'un espace { if(lettre == 0) printf("%d ",j); printf("%c",ligne2[i]); if(ligne2[i] != 32) attribut[nbattributs][lettre] = ligne2[i]; lettre++; } if(ligne2[i-1]== 32 && ligne2[i] == 99) // Type c { printf(" [chaine de caractères]"); } if(ligne2[i-1]== 32 && ligne2[i] == 101) // Type e { printf(" [entier]"); } if(ligne2[i] == 59) // Saut de ligne si ";" { printf("\n "); nbattributs++; lettre=0; j++; } i++; } printf("\n"); // Demande des champs sur lesquels on souhaite faire l'équi-jointure printf("Indices des champs sur lesquels on opère l'équi-jointure :\n"); printf(" Sur %s :\n",argv[1]); scanf("%d",&champs_1); printf(" Sur %s :\n",argv[2]); scanf("%d",&champs_2); printf("\n"); // Parcours des tables fgets(ligne1,500,table1); i = 0; nbattributs = 0; lettre = 0; while(ligne1[i]) { if(ligne1[i] != 59) { mot1[nbattributs][lettre] = ligne1[i]; lettre++; } if(ligne1[i] == 59) // Changement de mot si ";" { nbattributs++; lettre = 0; } i++; } fgets(ligne2,500,table2); j = 0; nbattributs = 0; lettre = 0; while(ligne2[j]) { if(ligne2[j] != 59) { mot2[nbattributs][lettre] = ligne2[j]; lettre++; } if(ligne2[j] == 59) // Changement de mot si ";" { nbattributs++; lettre = 0; } j++; } printf("Dernier %s : %s\n",argv[1],mot1[champs_1]); printf("Dernier %s : %s\n",argv[2],mot2[champs_2]); }
dimanche 14 mai 2006 à 09:29:19 | Re : [C] Problème avec fgets

GTFY

Désolé, normalement, il est mis en forme...
dimanche 14 mai 2006 à 15:59:58 | Re : [C] Problème avec fgets

GTFY

Bon, j'ai trouver... Si les admins voulaient bien supprimer ce sujet d'une inutilité flagrante, ça serait bien ;)
dimanche 14 mai 2006 à 19:01:19 | Re : [C] Problème avec fgets

SAKingdom

Membre Club
Peut tu nous expliquer quel était le problème?

___________________________________________
Les plus grands esprits trouvent toujours une solution


1 2

Cette discussion est classée dans : champs, printf, lettre, ligne1, ligne2


Répondre à ce message

Sujets en rapport avec ce message

Je cherche l'erreur [ par ScorpionTiti ] J'ai effectué un programme qui me permette d'écrire dans un fichier et je l'ai compilé. En le lançant, il m'envoie un message d'erreur mais je ne sais tout premier porgramme en C. HELP !! [ par juancho2786 ] Bonjour a TOUS!Je viens de créer mon tout premier "programme" en C. Mais je ne suis pas sur que le code soit correcte. Est ce que vous pouvez me dire tableau dynamique bidimensionnel en C [ par Amine_s11 ] Bonjour à tt je souhaite creer un tableau dynamique de 2 dimensions dont la hauteur est connue (2) alors j'ai fait: typedef int *ptr_int; typed Langage c : problème avec gets [ par Lens49 ] Bonjour, j'ai besoin d'aide pour débugger un petit programme que j'ai écris en langage c. Je pense que le problème est lié à une méconnaissance de la Gros probleme win32 API [ par fredsor ] Salut a tous, Voila j'ai développé une appli en win32 sous evc++, et je l'ai portée sous dev c++Dans cette appli, j'ai dû créer un tableau, pour cela Besoin Aide sur mon programme [ par knockner ] Voici mon programme je n'arrive pas a trouver mon erreurs , le programme se lance il faut appuyer 2 fois sur entrée , et des que l'on rentre une lettr Un peut d'aide pour mon projet [ par asiana ] Bonjour a toute et a tous Voila j'ai un petit problème avec un programme qui permet de géré une vente aux encheres des poissons avec "le switch  case" Return tableau? [ par zut69 ] Bonjour,Je suis en train d'écrire un petit programme sur les matrices en C, mais vu que je veux faire quelque chose d'assez général, j'ai besoin que d Ecrire dans un fichier texte avec espaces [ par zeprex ] Hello, donc voila j'aimerais écrire dans un fichier texte, mais il ne prends pas mes espaces :(Le Code :#include #include void main(){  FILE *F;   cha pb code probabilité [ par jeanphilippe37 ] bonjour, Je viens de terminer le code pour un programme de probabilité mais je ne peux pas voir les réponses s'afficher à l'écran!!!! c'est assez


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,443 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales