Techniques de mise en évidence et récupération du texte saisi en C++, Exercises of Business Informatics

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

2017/2018

Uploaded on 12/28/2018

REDA_MOUMEN
REDA_MOUMEN 🇲🇦

1 document

1 / 23

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Partial preview of the text

Download Techniques de mise en évidence et récupération du texte saisi en C++ and more Exercises Business Informatics in PDF only on Docsity!

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 int main(){ std::cout << "Hello world!" << std::endl; return 0; }

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 using namespace std; int main() { cout << "Hello world!" << endl; return 0; } Intéressons-nous de plus près à cette ligne : cout << "Hello world!" << endl;

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

Le flux d'entrée cin

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 . #include // pour cout #include // pour string using namespace std; int main() { string message = "Hello"; // création de la chaîne "Hello" message += " World !"; // concaténation de " Word !" cout << message << endl; // affichage de "Hello World !" } string est le type chaîne de caractères standard du langage C++. Il est donc judicieux de l'utiliser en priorité sur les char * qui sont hérités du langage C.

Quels sont les avantages de

std::string par rapport à

char*?

#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.

Quelle est la différence entre

et <string.h>?

■ 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) ;