salut tous le monde
je suis très débutante en c et j'ai besoin de corriger ma faute..
j'écris un petit programme qui découpe une phrase en des mots et celui ça marche bien mais le problème est que j'ai besoin de remplir ces mots dans un tableau.
Merci bien d'avance.. voila mon code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 1000000
void main()
{
char tab[100000]; int j=1;
char chaine[]="ce livre est consacré à l'etude des bases de donnnées et plus particuliérement à l'etude des bases de données XML";
int i;
for(i=0;chaine[i]!='\0';i++)
{
if(chaine[i]!=' ')
{
tab[j]=chaine[i]; j++;
}
else printf("\n");
}
}
jordane45
Messages postés38145Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention25 avril 2024344 22 févr. 2014 à 15:43
Bonjour,
1 - J'ai édité ton message pour y ajouter la coloration syntaxique => les balises de code Merci d'y penser lors de tes prochains messages.
2 - Je ne fais pas de C mais ta boucle FOR me parait étrange.
for (i = 0 ; i < 10 ; i++){
}
Ne devrais tu pas plutot utiliser une boucle While ?
Sinon pour ce qui est de ton souci.. peux tu nous en dire plus.
Qu'est-ce qui ne fonctionne pas ?
- Ne devrais tu pas déclarer ton tableau ( Tab) avant de l'utiliser.
- Ne faudrait-il pas le redimensionner au fur et à mesure que tu lui ajoute une valeur ?
( Comme je te l'ai dit.. je ne fais pas de C .. ce ne sont que des hypothèses... )
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 22 févr. 2014 à 17:27
Bonjour.
@jordane45: En C, il n'existe pas de tableau dynamique, il faut redimensionner soi-même. C'est pareil dans tous les langages, sauf que la plupart propose des "wrappers" qui le font de manière transparente (à tel point que certains pensent vraiment qu'en informatique un tableau puissent se redimensionner). La solution la plus simple (pas nécessairement la meilleure) est donc bien de prendre un tableau trop grand.
Sa boucle for est correcte. Elle va du début à la fin de la chaîne, aucun souci.
@mimi:
Tu peux utiliser un tableau fixe comme tu le fais, ce qui t'évite de redimensionner. Mais ton tableau doit être un tableau de "mots" et non un tableau de "lettres". Donc ça devrait être: "char* tab[10000]".
Deux solutions s'offrent alors à toi.
1) Tu utilises "strtok" qui permet "d'avancer de mot en mot" (je te laisse regarder la documentation).
ou
2) Tu places un pointeur sur le début d'un mot, et autre pointeur sur la fin. Tu recopies de "debut" jusqu'à "fin" (via strncpy). Tu places "debut" sur "fin" et tu avances "fin" sur le prochain séparateur. Tu répètes l'opération pour chaque mots.
Autres détails techniques:
- conio.h n'a rien à faire là.
- La signature d'une fonction est "int main(void)" (avec un return 0) et non "void main()". C'est important de bien le respecter.