2016-10-13 2 views
0

Voici mon code:Dans C++, mon programme va automatiquement à l'invite suivante CIN sans laisser l'utilisateur d'ajouter l'entrée

#include <iostream> 

using namespace std; 

const int SENIOR_PRICE = 9; 
const int ADULT_PRICE = 12; 
const float CHILD_PRICE = 6.95; 
const float TAX_RATE = .06; 

int main() 
{ 
     string name; 
     string address; 
     int numSeniorTickets; 
     int numAdultTickets; 
     int numChildTickets; 

     cout << "Enter customer name:" << endl; 
     cin >> name; 

     cout << "Enter customer address:" << endl; 
     cin >> address; 

     cout << "How many senior season tickets?" << endl; 
     cin >> numSeniorTickets; 

     cout << "How many adult tickets?" << endl; 
     cin >> numAdultTickets; 

     cout << "How many child tickets?" << endl; 
     cin >> numChildTickets; 

     return 0; 
} 

Après que l'utilisateur entre son nom, ils sont ensuite invités à entrer leur adresse. Mais avant qu'ils peuvent entrer leur adresse, il demande également le nombre de billets de saison senior. Pourquoi saute-t-il une ligne d'entrée? Voici ce qui se passe:

Enter customer name: 
Daniel Benson 
Enter customer address: 
How many senior season tickets? 
5 
How many adult tickets? 
5 
How many child tickets? 
5 
+0

Ceci est dû au fait que le \ n 'est sorti de l'entrée du nom. Dans le cas d'une chaîne, cin cède le caractère de retour à la ligne dans le tampon d'entrée et lorsque le cin suivant est appelé, il prend le retour à la ligne du tampon et n'attend pas l'entrée de l'utilisateur. Essayez de vider le tampon avant de passer à la chaîne suivante. –

+0

Je suis assez nouveau pour la programmation C++. Que voulez-vous dire par rinçage du tampon? – DanielBenson

+0

C'est vraiment un problème que vous pourriez facilement résoudre vous-même en utilisant votre débogueur. – MrEricSir

Répondre

0

cin >> nom;

Prend l'entrée uniquement jusqu'à l'espace. Par conséquent, si vous imprimez la variable name, vous obtiendrez Daniel. Et si vous imprimez la variable address, vous obtiendrez Benson. Donc, en ce qui concerne le programme, il a pris deux chaînes en entrée.

A proof of the above statements by printing the variables after input.

Vous pouvez utiliser cin.getline() pour prendre l'espace cordes séparées en entrée.

+0

Je n'avais pas réalisé que cin ne prenait que des entrées dans l'espace. J'ai utilisé cin.getline() à la place et ça marche très bien pour les chaînes. Merci! – DanielBenson