Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2583 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°132210
SMGFAN
Posté le 29-04-2002 à 14:27:36  profilanswer
 

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

mood
Publicité
Posté le 29-04-2002 à 14:27:36  profilanswer
 

n°132213
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-04-2002 à 14:30:45  profilanswer
 

strcat(tableau, nouvelle_phrase)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°132215
SMGFAN
Posté le 29-04-2002 à 14:34:09  profilanswer
 

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();
}

n°132222
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-04-2002 à 14:45:12  profilanswer
 

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
n°132224
SMGFAN
Posté le 29-04-2002 à 14:47:21  profilanswer
 

Merci beaucoup !!
 
Je vais essayer ça !

n°132235
SMGFAN
Posté le 29-04-2002 à 14:57:49  profilanswer
 

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;

n°132240
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-04-2002 à 15:06:34  profilanswer
 

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
n°132255
SMGFAN
Posté le 29-04-2002 à 15:21:42  profilanswer
 

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 !

n°132274
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-04-2002 à 15:39:13  profilanswer
 

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
n°132288
SMGFAN
Posté le 29-04-2002 à 15:52:36  profilanswer
 

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 !

mood
Publicité
Posté le 29-04-2002 à 15:52:36  profilanswer
 

n°132304
xkamui
Their Destiny Was Foreordained
Posté le 29-04-2002 à 16:08:51  profilanswer
 

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

n°132325
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-04-2002 à 16:33:11  profilanswer
 

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
n°132341
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 29-04-2002 à 16:58:29  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[C] comment on fé une fonction ki renvoie une chaine de caracteres ?[C] Comment remplir un tableau de caractères ?
[PHP] tri d'un tableauranger un tableau en php
[PERL] remplacement de partie dans un tableaupour remplir 1 dossier, difference entre environnement, systemes, méth
Mettre une carte graphique sur un image en fond de tableau dans dream?[C++Builder] Tableau d'images
Plus de sujets relatifs à : [C] Comment remplir un tableau de caractères en boucle ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR