2010-04-07 12 views
3
 cout << "Input street number: "; 
     cin >> streetnum; 
     cout << "Input street name: "; 
     cin >> streetname; 
     cout << "Input resource name: "; 
     cin >> rName; 
     cout << "Input architectural style: "; 
     cin >> aStyle; 
     cout << "Input year built: "; 
     cin >> year; 

Le problème avec le code ci-dessus se produit si vous entrez des espaces entre les mots. Par exemple, si j'entre "Ampitheater Parkway" pour le nom de la rue, alors il met "Ampitheater" dans le nom de la rue, saute l'invite pour le nom de la ressource et entre "Parkway" dans le champ suivant. Comment puis-je réparer cela?Comment modifier ce code C++ pour améliorer le fonctionnement des entrées

Répondre

7

C'est parce que lorsque vous utilisez l'opérateur d'extraction avec une chaîne comme la droite, il arrête au premier caractère d'espace blanc.

Ce que vous voulez est la fonction libre getline:

std::getline(std::cin, streetnum); // reads until \n 

Vous pouvez spécifier un autre séparateur si vous voulez:

char c = /* something */; 
std::getline(std::cin, streetnum, c); // reads until c is encountered 

Encore mieux est de faire une petite fonction à utiliser :

void prompt(const std::string& pMsg, std::string& pResult) 
{ 
    std::cout >> pMsg >> ": "; 

    std::getline(std::cin, pResult); 
} 

prompt("Street Number", streetnum); 
prompt("Street Name", streetname); 
// etc. 

:)

2

Vous pouvez utiliser getline():

cout << "Input street number: "; 
cin.getline(streetnum, 256); // Assuming 256 character buffer... 
cout << "Input street name: "; 
cin.getline(streetname, 256); 
+2

Il serait préférable d'utiliser 'std :: string' et' std :: getline' au lieu de coder en dur une taille de tampon. – GManNickG

+0

@Gman: True - mais c'est au moins corrige le problème à portée de main. –