Maison > Article > développement back-end > Programme C++ pour obtenir les commentaires de l'utilisateur
Lors de l'écriture d'un programme dans n'importe quel langage de programmation, recevoir des entrées est le travail de base que nous effectuons dans presque tous les programmes. Parfois, nous obtenons des entrées directement depuis la console et parfois nous obtenons des entrées depuis un fichier. Obtenir l'entrée d'un fichier présente certains avantages car cela ne nous oblige pas à la saisir encore et encore et nous pouvons parfois enregistrer de bons cas de test d'entrée dans un fichier. Cependant, dans cet article, nous nous concentrerons sur la saisie basée sur la console. Nous apprendrons différentes techniques pour obtenir les commentaires de l'utilisateur en C++.
Il existe plusieurs manières différentes d’obtenir des informations depuis la console. Certaines d’entre elles sont des méthodes de type C, tandis que d’autres utilisent des flux d’entrée qui existent en C++. Nous les aborderons un par un et fournirons quelques exemples pour une meilleure compréhension.
En langage C, nous utilisons la fonction scanf() pour analyser l'entrée de la console sous forme de chaîne formatée. Cette fonction est également disponible en C++, donc pour recevoir des entrées de manière formatée, vous pouvez utiliser la méthode scanf().
Syntaxe de base de la méthode scanf(), y compris la chaîne de format.
scanf ( “<format string>”, <address of variable> );
spécificateur de format formaté scanf().
Spécificateur de format | La traduction chinoise deDescription | est :Description |
---|---|---|
%c | Pour la saisie d'un seul caractère | |
%s | Pour les chaînes sans espaces | |
%Bonjour | Entier court signé | |
%hu | Entier court non signé | |
%Lf | Double long | |
%d | Entier décimal (signé), en base 10 | |
%i | Entier (base de détection automatique) | |
%o | Entier octal | |
%x | Entier hexadécimal | |
%p | Pointeur | |
%f | Nombres à virgule flottante |
#include <iostream> using namespace std; void takeInput() { int x; char s[50]; // C like string or character array char c; float f; cout << "Enter an integer: "; scanf( "%d", &x ); cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; scanf( " %c", &c ); cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; scanf( "%f", &f ); cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; scanf( "%s", s ); //string do not need address //convert to C++ like string from C like string string SCpp; SCpp.assign(s); cout << "\nYou have entered the string: " << SCpp << endl; } int main(){ takeInput(); }
Enter an integer: 5 You have entered an integer: 5 Enter a character: K You have entered a character: K Enter a float value: 2.56 You have entered float value: 2.56 Enter a string: HelloWorld You have entered the string: HelloWorld
Dans cette méthode, cela fonctionne pour d'autres types de données, mais pour les chaînes, il n'accepte que les chaînes de type C ou les tableaux de caractères. Pour afficher une chaîne à l'aide de "cout", nous devons la convertir en un objet chaîne de type C++. Sinon, nous pouvons utiliser la fonction printf() pour afficher la sortie. Ce sont des exemples de base. Voyons maintenant l'effet du formatage de la chaîne dans l'exemple suivant.
#include <iostream> using namespace std; void takeInput() { int dd, mm, yyyy; cout << "Enter a date in dd-mm-yyyy format: "; scanf( "%d-%d-%d", &dd, &mm, &yyyy ); cout << "\nThe given date is: "; printf( "%d/%d/%d", dd, mm, yyyy ); } int main(){ takeInput(); }
Enter a date in dd-mm-yyyy format: 14-10-2022 The given date is: 14/10/2022
Dans cet exemple, nous recevons une entrée sous la forme (jj-mm-aaaa), il n'acceptera aucun autre format pour ces trois valeurs entières. Et dans notre sortie, nous affichons la même date dans un autre format (jj/mm/aaaa). C’est à cela que sert réellement l’entrée de chaîne formatée. Ensuite, nous verrons un formulaire plus simple utilisant le flux d'entrée "cin" pour saisir directement tout type de données dans une variable spécifiée.
cin est une classe de flux d'entrée C++ qui utilise l'opérateur d'extraction >> pour obtenir l'entrée d'un flux. Cet opérateur insère automatiquement une valeur dans la variable spécifiée en obtenant l'entrée de la console. La syntaxe est la suivante.
Syntaxe de base de la méthode cin
cin >> <input variable name>La traduction chinoise de
#include <iostream> using namespace std; void takeInput() { int x; string s; char c; float f; cout << "Enter an integer: "; cin >> x; cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; cin >> c; cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; cin >> f; cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter an integer: 8 You have entered an integer: 8 Enter a character: L You have entered a character: L Enter a float value: 3.14159 You have entered float value: 3.14159 Enter a string: WeAreLearningC++InputTaking You have entered the string: WeAreLearningC++InputTaking
Comme d'autres variables, nous pouvons utiliser la chaîne directement au lieu de l'avoir sous forme de tableau de caractères. Dans cette méthode, il attribue automatiquement l'entrée donnée à un objet chaîne. Cependant, il y a un problème avec les chaînes. Nous ne pouvons pas saisir de chaînes de plusieurs mots de cette façon. Si nous écrivons une chaîne de plusieurs mots, seul le premier mot sera pris en compte. Voyons cela dans l'exemple ci-dessous.
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter a string: Hello World, This is a nice day You have entered the string: Hello
Pour surmonter ce problème, nous devons utiliser la fonction getline() pour obtenir une chaîne délimitée par des espaces. Dans cette méthode, la lecture du texte se termine lorsqu'un caractère de nouvelle ligne est rencontré.
getline(std::cin, <string variable>)La traduction chinoise de
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; getline(cin, s); cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter a string: Hello World, Have a nice day You have entered the string: Hello World, Have a nice day
Dans cet article, nous avons vu différentes utilisations de la lecture des entrées utilisateur à l'aide de la méthode scanf() et du flux cin. L'attribution d'entrées à d'autres types de variables est simple. Cependant, ni le spécificateur de format %s ni la classe cin n'acceptent les chaînes d'entrée avec des espaces. Comme le langage C, il existe une fonction désignée en C++ pour lire une chaîne avec des mots séparés par des espaces. Vous pouvez utiliser la méthode getline() pour accepter cette chaîne d'entrée. Nous pouvons également obtenir des entrées à partir de fichiers et de flux de chaînes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!