[C] Comment remplir un tableau de caractères en boucle ?

Comment remplir un tableau de caractères en boucle ? [C] - C++ - Programmation

Marsh Posté le 29-04-2002 à 14:27:36    

Salut !
 
Petite question :
 
Je demande à l'utilisateur d'entrer une phrase, je la place dans un tableau, ensuite l'utilisateur entre une deuxième phrase, comment la placer dans le même tableau, à la suite de l'autre ?
 
Merci beaucoup

Reply

Marsh Posté le 29-04-2002 à 14:27:36   

Reply

Marsh Posté le 29-04-2002 à 14:30:45    

strcat(tableau, nouvelle_phrase)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-04-2002 à 14:34:09    

Je pourrais avoir plus de détails svp, je débute en programmation... MERCI !
 
Voici ce que j'ai pour l'instant :
 
#include <stdio.h>
 
void lecture(){
     int i,cpt=0,taille=0;
     char tab[300];
     char choix='o';
 
     while (choix=='o';){
           printf("Veuillez entrer la phrase a saisir :\n" );
           ???????????????;
 
           for (i=0;i<300;i++)
               printf("%c",tab[i]);
 
           cpt++;
           printf("\nPhrase numero %d enregistree.",cpt);
 
                do taille++;
                while (tab[taille]!='\0';);
 
           taille++;
           printf("\nVoulez-vous poursuivre la saisie ? (o/n) " );
           scanf("%s",&choix);
           printf("\n" );
           if (taille>=300) return;
           }
 
     return;
}
 
main(){
     lecture();
}

Reply

Marsh Posté le 29-04-2002 à 14:45:12    

char nouvphrase[300];
 
 
à la place des "???" :
fgets(nouvphrase, 300 - strlen(tab), stdin); // "300 - strlen(tab)" pour ne pas prendre plus que la place restante dans tab
strcat(tab, nouvphrase);
 
Tu peux virer
        do taille++;
        while (tab[taille]!='\0';);
et utiliser strlen pour connaître la taille de tab
 
De la même manière,
      for (i=0;i<300;i++)
       printf("%c",tab[i]);
 
tu peux mettre juste
       printf("%s",tab);
 
pour pas devoir faire de boucle...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-04-2002 à 14:47:21    

Merci beaucoup !!
 
Je vais essayer ça !

Reply

Marsh Posté le 29-04-2002 à 14:57:49    

Y'a un soucis, je peux entrer la première phrase sans problème, mais lorsque le programme me demande si je veux poursuivre la saisie, je met "o", et je ne peux pas entrer de phrase, il me met tout de suite phrase 2 enregistrée... snif... Voilà où j'en suis :
 
     int i,cpt=0;
     char tab[300],nouvphrase[300];
     char choix='o';
 
     while (choix=='o';){
           printf("Veuillez entrer la phrase a saisir :\n" );
           fgets(nouvphrase,300-strlen(tab),stdin);
           strcat(tab,nouvphrase);
 
           printf("%s",tab);
 
           cpt++;
           printf("\nPhrase numero %d enregistree.",cpt);
 
           printf("\nVoulez-vous poursuivre la saisie ? (o/n) " );
           scanf("%s",&choix);
           printf("\n" );
           if (strlen(tab)>=300) return;
           }
 
     return;

Reply

Marsh Posté le 29-04-2002 à 15:06:34    

tu dois faire scanf("%c" plutôt que "%s"... vu que choix c'est un char et pas un tableau.
Essaie de rajouter fflush(stdin); avant et après le fgets.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-04-2002 à 15:21:42    

Oki c'est fait !
 
Ca sert à quoi fflush(stdin) ?
 
Il reste encore un dernier petit soucis, la deuxième phrase ne se place pas à la suite de l'autre, mais il y a un retour chariot entre les deux... Que faire ?
 
Merci beaucoup pour tous ces conseils !

Reply

Marsh Posté le 29-04-2002 à 15:39:13    

fflush ça vide le buffer (genre l'appui de la touche 'enter' qui n'est pas supprimé par fgets, ou si tu appuies une touche par erreur pendant le traitement, etc...)
Si il y a un retour de ligne entre chaque phrase entrée, c'est peut-être que fgets le stocke...
Après le fgets tu fais ceci:
nouvphrase[strlen(nouvphrase) - 2] = 0;  
( -1 si tu es sous Linux/Unix ou sous Mac, car ce n'est que sous Windows que le retour de ligne prend deux caractères)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-04-2002 à 15:52:36    

Merci beaucoup, ca fonctionne !!!!!!!! COOOOOL ! :)
 
En fait, le retour de ligne ne prend qu'une place sous Windows aussi... et j'ai remplacé le 0 par un espace, sinon les phrases sont collées entre elles...
 
Merci et probablement à très bientôt !

Reply

Marsh Posté le 29-04-2002 à 15:52:36   

Reply

Marsh Posté le 29-04-2002 à 16:08:51    

dites, vous utilisez koi pour compiler le fichier : file.c ??
je suis sous WinXp et je débute GRAAAAAAAAAAAAVE en C  :D  
 
merci

Reply

Marsh Posté le 29-04-2002 à 16:33:11    

SMGFAN a écrit a écrit :

Merci beaucoup, ca fonctionne !!!!!!!! COOOOOL ! :)
 
En fait, le retour de ligne ne prend qu'une place sous Windows aussi... et j'ai remplacé le 0 par un espace, sinon les phrases sont collées entre elles...
 
Merci et probablement à très bientôt !  




 
en fait c'est vrai que comme il y avait déjà un 0 de fin tu pouvais le remplacer par un espace...
Mais si j'étais toi j'essaierais
nouvphrase[strlen(nouvphrase) - 2] = ' ';  
nouvphrase[strlen(nouvphrase) - 1] = 0;  
 
Si il ne coupe pas le dernier caractère, c'est que sous Windows c'est bien deux caractère (c'est un fait, pas une théorie de ma part).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-04-2002 à 16:58:29    

antp a écrit a écrit :

 
 
en fait c'est vrai que comme il y avait déjà un 0 de fin tu pouvais le remplacer par un espace...
Mais si j'étais toi j'essaierais
nouvphrase[strlen(nouvphrase) - 2] = ' ';  
nouvphrase[strlen(nouvphrase) - 1] = 0;  
 
Si il ne coupe pas le dernier caractère, c'est que sous Windows c'est bien deux caractère (c'est un fait, pas une théorie de ma part).  




 
Sous windows en héxa c'est '0D0A', sous Nunux c'est '0D', sous Mac c'est '0A'.
Comme l'a dit antp, c'est un fait, pas une théorie !
 
@++

 

[jfdsdjhfuetppo]--Message édité par juju_le_barbare le 29-04-2002 à 16:59:08--[/jfdsdjhfuetppo]


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed