















Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Découvrez comment afficher du texte à l'écran et comment récupérer du texte saisi au clavier en C++ avec la bibliothèque iostream. En apprendre sur les flux de sortie et d'entrée, les mots-clés cout et cin, et les avantages de std::string par rapport à char*.
Typology: Exercises
1 / 23
This page cannot be seen from the preview
Don't miss anything!
















Cette séance sera assez simple : nous verrons quelles techniques on utilise en C++ pour afficher du texte à l'écran (dans une console) et comment on récupère du texte saisi au clavier. Vous allez voir que c'est assez différent ce qu'on connaissait en C avec printf et scanf. En code::Blocks quand on crée un nouveau projet, il génère un fichier main.cpp contenant ce code : #include
std::cout << "Hello world!" << std::endl; Il y a deux mots-clé particuliers dans cette ligne : cout et endl. Vous noterez qu'ils ont tous les deux le préfixe std:: Tous les mots-clé de la librairie standard du C++ utilisent ce préfixe. Théoriquement, on est obligé de le mettre à chaque fois, mais c'est un peu lourd. On a heureusement une solution pour se simplifier la vie. Rajoutez cette ligne de code avant le main () : using namespace std; Du coup, vous pouvez virer tous les préfixes std:: Ca rend déjà notre code un peu plus facile à lire :
#include
En C++, il existe plusieurs manières pour un programme d'interagir avec les éléments extérieurs que sont, la console, les fichiers, les périphériques, etc. Un des moyens particulièrement puissant d'interaction est le flux. Il existe des flux dans 2 directions, du programme vers l'extérieur et évidemment dans le sens contraire, ce qui permet ainsi d'influencer le déroulement d'un programme. cout n'est pas une fonction mais un flux du programme vers l’extérieur, ça représente la sortie en C++ (out = sortie). La sortie d'un programme. cout << "Hello world!" << endl; ce code signifie que le texte "Hello world!" suivi d'un retour à la ligne est envoyé vers l'écran. Il faut bien imaginer que les chevrons << indiquent le sens dans lequel les données sont envoyées. Ce qui est génial, c'est qu'on n'a plus besoin de s'embêter avec la syntaxe des printf : %d, %lf, %s, %c etc... Ici, le langage est plus intelligent, il reconnaît le type de variable qui lui est envoyé.
Instructions en utilisant cout Instructions équivalentes en utilisant printf cout << « hello world » << endl ; printf(« hello world\n») ; cout << « hello world »; printf(« hello world») ; int age = 10 ; iout << « J’ai » << age << « ans » << endl ; int age = 10 ; printf(« j’ai %d ans\n », ans) ; float a = 2.12, b = - 5.9 ; cout << «la somme de » << a << « et » << b << « est egale à » << a + b << endl ; float a = 2.12, b = - 5.9 ; printf( «la somme de %f et %f est egale à %f \n », a, b, a + b);
A titre d’exemple, demandons à l’utilisateur d’entrer son age : cin >> age ; // equivalente à scanf(« %d », &age) ; cin représente donc le clavier et permet de récupérer du texte saisi par l'utilisateur. 2 choses doivent être remarqués : v Les flèches ont changé de sens : la lecture se fait ici de gauche à droite. cin représente le clavier et envoie les données dans la variable age. Il faut donc imaginer que les données transitent du clavier vers la variable age. C'est ce qu'on appelle un flux. v Il n'y a pas de symbole ‘&’ devant age! En C, on aurait dû écrire &age pour envoyer l'adresse de la variable à la fonction pour qu'elle sache où écrire en mémoire. En C++, c'est plus la peine.
Le C++ standard possède son propre type chaîne de caractères : std::string. Celui-ci est déclaré dans l'en-tête standard
#define MAX_SIZE 100 void Exemple( void ) { char nom[ MAX_SIZE ]; printf( "Veuillez entrer votre nom : " ); scanf("%s", nom) ; } Là aussi, string est meilleur car non seulement le problème (inévitable) de la fois où cette taille limite sera atteinte ne se pose pas, mais aussi parce que ce code C provoque une perte plus ou moins importante de mémoire (typiquement, MAX_SIZE vaut 100 voire 1000, c'est-à-dire que même si une chaîne ne comporte que 10 caractères, elle occupera 100 ou 1000 octets en mémoire !). La comparaison doit donc être faite avec une gestion dynamique de char*, chose laborieuse à gérer en C et faite de manière transparente et sûre par string.
■ Sont deux fichiers d'en-tête totalement différents. ■ Le premier est l'en-tête standard C++ qui définit le type std::string. ■ Le second est un en-tête hérité du langage C qui définit diverses fonctions C de manipulation de chaînes de caractères.
Le seul problème qu’on peut rencontrer en utilisant getline est de l’utiliser apres la lecture d’un nombre entier ou un caractère ou un nombre reel, comme le montre l’exemple suivant : int age ; string name ; cin >> age ; getline(cin, name) ; Dans cet example, si on affiche le contenu de la variable name, on trouvera qu’elle est vide.
Pour éviter ce problème on utilise cin.ignore() avant la lecture du texte, comme le montre l’exemple suivant : int age ; string name ; cin >> age ; cin.ignore() ; getline(cin, name) ;