OVH Cloud OVH Cloud

[newby] cin, cout, et char [255]

3 réponses
Avatar
XecTech
#include <iostream>
using namespace std;

void main() {
char entry[255];
cin >> entry;
cout << entry;
}

si je tape un texte avec des espaces, il ne me retourne que la partie avant
le 1° espace, pourquoi, et comment y palier ?

3 réponses

Avatar
O.
"XecTech" avait prétendu :
#include <iostream>
using namespace std;
void main() {
char entry[255];
cin >> entry;
cout << entry;
}
si je tape un texte avec des espaces, il ne me retourne que la partie avant
le 1° espace, pourquoi, et comment y palier ?


Parce que l'espace est considéré comme la fin de l'entrée, comme si tu
poussais sur enter. Utilise cin.getline()

--
Pas de promo perso à la con dans ma signature... avouez que ça fait du
bien dans ce monde de pubs...

Avatar
Benoit Rousseau
XecTech wrote:
#include <iostream>
using namespace std;

void main() {
char entry[255];
cin >> entry;
cout << entry;
}

si je tape un texte avec des espaces, il ne me retourne que la partie avant
le 1° espace, pourquoi, et comment y palier ?




cin copy dans entry tous les caractères jusqu'à ce qu'il tombe sur un
séparateur (' ', 't', 'n', '' et peut être d'autres)
Pour qu'il saisisse une ligne entière, il faut utiliser
cin.get(entry, 255, 'n');
qui lira 255 caractères si il ne trouve pas de 'n'.

Une question me vient à l'esprit : Il me semble que char entry[255] est
équivalent à char entry[256] et que tout tableau de taille x est étendu
au multiple de 8 supérieur à x . Est ce vrai ?


--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/


PS : desolé si ce post vous est déjà parvenu, il semble ne pas être
parti chez moi...

Avatar
Loïc Joly
Benoit Rousseau wrote:

XecTech wrote:

#include <iostream>
using namespace std;

void main() {
char entry[255];
cin >> entry;
cout << entry;
}

si je tape un texte avec des espaces, il ne me retourne que la partie
avant
le 1° espace, pourquoi, et comment y palier ?



std::string entry;
std::getline (cin, content);

Comme ça, en prime, tu peux gérer des lignes aussi courtes/longues que
tu veux.

cin copy dans entry tous les caractères jusqu'à ce qu'il tombe sur un
séparateur (' ', 't', 'n', '' et peut être d'autres)
Pour qu'il saisisse une ligne entière, il faut utiliser
cin.get(entry, 255, 'n');
qui lira 255 caractères si il ne trouve pas de 'n'.

Une question me vient à l'esprit : Il me semble que char entry[255] est
équivalent à char entry[256]


Non

et que tout tableau de taille x est étendu
au multiple de 8 supérieur à x . Est ce vrai ?


Peut-être que sur ta plate-forme, un tableau de 255 char occupera autant
de place qu'un tableau de 256 chars (pour des raisons de padding, c'est
à dire que certaines architecture préfèrent travailler avec des adresses
multiples de N), mais çe ne te donne pour autant pas le droit d'utiliser
l'élément en plus.

Mais bon, comme dans la vraie vie, on utilise std::string, la question
ne se pose pas vraiment... ;)

--
Loïc