begin process at 2012 05 29 21:03:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

problème chaines de caractères


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

problème chaines de caractères

jeudi 11 septembre 2003 à 11:52:03 | problème chaines de caractères

tintin72

Bonjour
J'aimerai avoir un petit éclaircissement sur les chaines de caractères.
Voici un programme tout bête...

char prenom[100];

cout<<"Taper votre prénom"<<endl;
gets(prenom);
cout<<"Bonjour "<<prenom<<endl;

Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine.
Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])?
Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop?
Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ?

Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ?


Un autre truc que je comprend pas avec le code suivant..

char nom[50];
char prenom[50];
char telephone[50];

cout<<"Entrez le nom: \n"<<endl;
gets(nom);
cout<<nom<<" "<<endl;
cout<<"Entrez le prénom: \n"<<endl;
gets(prenom);
cout<<prenom<<endl;
cout<<"Entrez le n° de téléphone: \n"<<endl;
gets(telephone);
cout<<telephone<<endl;

Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch,

int code;
cout<<"entrez un code"<<endl;
cin>>code;

switch(code){
case 1:
//le code
break;

case2: //etc.....

il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde.
Quelqu'un saurait il pourquoi ?

Merci !
jeudi 11 septembre 2003 à 13:02:51 | Re : problème chaines de caractères

Anacr0x

Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi
Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus !

moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() )

Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop
@+

-------------------------------
Réponse au message :
-------------------------------

> Bonjour
> J'aimerai avoir un petit éclaircissement sur les chaines de caractères.
> Voici un programme tout bête...
>
> char prenom[100];
>
> cout<<"Taper votre prénom"<<endl;
> gets(prenom);
> cout<<"Bonjour "<<prenom<<endl;
>
> Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine.
> Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])?
> Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop?
> Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ?
>
> Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ?
>
>
> Un autre truc que je comprend pas avec le code suivant..
>
> char nom[50];
> char prenom[50];
> char telephone[50];
>
> cout<<"Entrez le nom: \n"<<endl;
> gets(nom);
> cout<<nom<<" "<<endl;
> cout<<"Entrez le prénom: \n"<<endl;
> gets(prenom);
> cout<<prenom<<endl;
> cout<<"Entrez le n° de téléphone: \n"<<endl;
> gets(telephone);
> cout<<telephone<<endl;
>
> Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch,
>
> int code;
> cout<<"entrez un code"<<endl;
> cin>>code;
>
> switch(code){
> case 1:
> //le code
> break;
>
> case2: //etc.....
>
> il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde.
> Quelqu'un saurait il pourquoi ?
>
> Merci !
jeudi 11 septembre 2003 à 13:38:40 | Re : problème chaines de caractères

vecchio56

Administrateur CodeS-SourceS
La librairie STL fournit le modèle basic_string
qui permet de résourdre ce type de problèmes, tu n'as pas a t'occuper de la mémoire; elle est automatiquement allouée et désallouée quand c'est nécéssaire. Par contre, ca se fait un peu au détriment de l'efficacité.


-------------------------------
Réponse au message :
-------------------------------

> Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi
> Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus !
>
> moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() )
>
> Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop
> @+
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Bonjour
> > J'aimerai avoir un petit éclaircissement sur les chaines de caractères.
> > Voici un programme tout bête...
> >
> > char prenom[100];
> >
> > cout<<"Taper votre prénom"<<endl;
> > gets(prenom);
> > cout<<"Bonjour "<<prenom<<endl;
> >
> > Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine.
> > Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])?
> > Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop?
> > Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ?
> >
> > Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ?
> >
> >
> > Un autre truc que je comprend pas avec le code suivant..
> >
> > char nom[50];
> > char prenom[50];
> > char telephone[50];
> >
> > cout<<"Entrez le nom: \n"<<endl;
> > gets(nom);
> > cout<<nom<<" "<<endl;
> > cout<<"Entrez le prénom: \n"<<endl;
> > gets(prenom);
> > cout<<prenom<<endl;
> > cout<<"Entrez le n° de téléphone: \n"<<endl;
> > gets(telephone);
> > cout<<telephone<<endl;
> >
> > Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch,
> >
> > int code;
> > cout<<"entrez un code"<<endl;
> > cin>>code;
> >
> > switch(code){
> > case 1:
> > //le code
> > break;
> >
> > case2: //etc.....
> >
> > il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde.
> > Quelqu'un saurait il pourquoi ?
> >
> > Merci !
>
jeudi 11 septembre 2003 à 13:47:04 | Re : problème chaines de caractères

BruNews

Administrateur CodeS-SourceS
Tu peux meme dire 'BEAUCOUP' de perte d'efficacite.
Et puis pour un debutant, c'est pas a conseiller sinon il n'apprendra jamais a coder correctement.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> La librairie STL fournit le modèle basic_string
> qui permet de résourdre ce type de problèmes, tu n'as pas a t'occuper de la mémoire; elle est automatiquement allouée et désallouée quand c'est nécéssaire. Par contre, ca se fait un peu au détriment de l'efficacité.
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi
> > Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus !
> >
> > moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() )
> >
> > Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop
> > @+
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Bonjour
> > > J'aimerai avoir un petit éclaircissement sur les chaines de caractères.
> > > Voici un programme tout bête...
> > >
> > > char prenom[100];
> > >
> > > cout<<"Taper votre prénom"<<endl;
> > > gets(prenom);
> > > cout<<"Bonjour "<<prenom<<endl;
> > >
> > > Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine.
> > > Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])?
> > > Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop?
> > > Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ?
> > >
> > > Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ?
> > >
> > >
> > > Un autre truc que je comprend pas avec le code suivant..
> > >
> > > char nom[50];
> > > char prenom[50];
> > > char telephone[50];
> > >
> > > cout<<"Entrez le nom: \n"<<endl;
> > > gets(nom);
> > > cout<<nom<<" "<<endl;
> > > cout<<"Entrez le prénom: \n"<<endl;
> > > gets(prenom);
> > > cout<<prenom<<endl;
> > > cout<<"Entrez le n° de téléphone: \n"<<endl;
> > > gets(telephone);
> > > cout<<telephone<<endl;
> > >
> > > Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch,
> > >
> > > int code;
> > > cout<<"entrez un code"<<endl;
> > > cin>>code;
> > >
> > > switch(code){
> > > case 1:
> > > //le code
> > > break;
> > >
> > > case2: //etc.....
> > >
> > > il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde.
> > > Quelqu'un saurait il pourquoi ?
> > >
> > > Merci !
> >
>
jeudi 11 septembre 2003 à 15:52:17 | Re : problème chaines de caractères

vecchio56

Administrateur CodeS-SourceS
Il y en a qui préfèrent la fiabilité à l'efficacité, surtout que dans le cas présent ca me semble être la meilleure solution.



-------------------------------
Réponse au message :
-------------------------------

> Tu peux meme dire 'BEAUCOUP' de perte d'efficacite.
> Et puis pour un debutant, c'est pas a conseiller sinon il n'apprendra jamais a coder correctement.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > La librairie STL fournit le modèle basic_string
> > qui permet de résourdre ce type de problèmes, tu n'as pas a t'occuper de la mémoire; elle est automatiquement allouée et désallouée quand c'est nécéssaire. Par contre, ca se fait un peu au détriment de l'efficacité.
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi
> > > Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus !
> > >
> > > moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() )
> > >
> > > Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop
> > > @+
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Bonjour
> > > > J'aimerai avoir un petit éclaircissement sur les chaines de caractères.
> > > > Voici un programme tout bête...
> > > >
> > > > char prenom[100];
> > > >
> > > > cout<<"Taper votre prénom"<<endl;
> > > > gets(prenom);
> > > > cout<<"Bonjour "<<prenom<<endl;
> > > >
> > > > Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine.
> > > > Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])?
> > > > Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop?
> > > > Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ?
> > > >
> > > > Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ?
> > > >
> > > >
> > > > Un autre truc que je comprend pas avec le code suivant..
> > > >
> > > > char nom[50];
> > > > char prenom[50];
> > > > char telephone[50];
> > > >
> > > > cout<<"Entrez le nom: \n"<<endl;
> > > > gets(nom);
> > > > cout<<nom<<" "<<endl;
> > > > cout<<"Entrez le prénom: \n"<<endl;
> > > > gets(prenom);
> > > > cout<<prenom<<endl;
> > > > cout<<"Entrez le n° de téléphone: \n"<<endl;
> > > > gets(telephone);
> > > > cout<<telephone<<endl;
> > > >
> > > > Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch,
> > > >
> > > > int code;
> > > > cout<<"entrez un code"<<endl;
> > > > cin>>code;
> > > >
> > > > switch(code){
> > > > case 1:
> > > > //le code
> > > > break;
> > > >
> > > > case2: //etc.....
> > > >
> > > > il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde.
> > > > Quelqu'un saurait il pourquoi ?
> > > >
> > > > Merci !
> > >
> >
>


Cette discussion est classée dans : problème, code, chaines, caractères, cout


Répondre à ce message

Sujets en rapport avec ce message

Problème avec mes floatant [ par raviel ] Bonjour Je vous expose mon problème l'utilisateur peut rentrer 2 floatant (a et b) et additionnant les 2 pour former le résultat (c) et je souhaite e problème avec le backtracking (sudoku) [ par anoubest ] Bonjour tt le monde, g a écrire un code pour résoudre un sudoku. on suppose ke la grille en entrée est un tableau de 9*9 chiffres entre 0 et 9 (0 pr l problème d'accent [ par titi4659 ] Bonjour,j'ai un problème avec des accents en C++.J'ai une chaine de caractère que je voudrai vérifier.Je souhaiterai savoir si celle ci contient ou no QUESTION DLL OU FICHIER EXTERNE ? [ par lectpe ] Bonjour, J'ai réalisé une application permettant à l'utilisateur d'en changer la langue (français, anglais, espagnol...).Les chaines de caractères cor Problème avec les chaînes de caractères [ par raviel ] bonjour j'ai un soucis depuis quelque temps c'est que j'aimerais enregistrer une chaîne de caractère comportant même des espaces dans un fichier .txt Problème segmentation [ par s2pawn ] Bonjour je travail sur un jeu d'echecs en c++ variante alice, et je rencontre un probleme de segmentation avec le pion, la vérification du mouvement problème d'éritage [ par panthere007 ] Salut, Bon je vais essayer d'être clair mai avec l'héritage c'est pas facile précision ce code est programmer sous geany et compiler avec g++ excuser tri alphabétique ultra rapide de chaines de caractères de longueur variable [ par mslider ] -- Bonjour, je sais que c'est un forum dédié au C mais je vais parler de pascal. En effet je connais bien ce langage et je l'ai utilisé pour trier a Problème compilation Unicode [ par djelangelo ] Bonjour, Je viens de me lancer dans la programmation C++ et dans les wxWidgets sous code::blocks [^^happy6]. En utilisant un petit tutorial d'initia problème de compilation [ par boualiasma ] Bonjour, J'ai un programme codé en c sous Microsoft Visual C++ 6.0 qui compile et s'éxecute bien. J'ai essayé de compiler ce programme avec Dev-C++


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 5,054 sec (3)

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