2010-06-07 6 views
0

Je ne suis pas sûr de ce qui me manque ici. C'est un extrait de code que j'ai trouvé sur un site et je l'ai placé dans mon programme pour voir comment cela fonctionne et ensuite je le modifierais à mon goût plus tard. J'inclus iostream et cet extrait de code est dans ma fonction principale.Obtenir une entrée utilisateur en utilisant CIN.get() en C++ question

char buffer[80]; 
cout << "Enter the string: "; 
cin.get(buffer, 79);  // get up to 79 or newline 
cout << "Here's the buffer: " << buffer << endl; 

Ce qui se passe est que le programme ne demande jamais l'entrée de l'utilisateur. Il semble juste imprimer les deux déclarations cout, puis se termine. Le site où je suis l'extrait de montre la sortie:

Enter the string: Hello World 
Here's the buffer: Hello World 
+1

ne devrait-il être 'Cout << "Entrez la chaîne:" << endl;'? –

+1

pourquoi? Cela ne devrait pas avoir d'importance – segfault

+0

Cela dépend entièrement de la conception de votre interface utilisateur. Si vous voulez que la chaîne soit entrée sur la même ligne que l'invite, alors non, ce ne devrait pas être le cas. – Cogwheel

Répondre

1

Mon conseil serait d'oublier l'existence de cet extrait et rechercher la place std::getline. Vous souhaitez utiliser quelque chose comme ceci:

#include <string> 
#include <iostream> 

int main() { 
    std::string buffer; 

    std::getline(buffer, std::cin); 
    std::cout << "Here's the buffer: " << buffer; 
    return 0; 
} 

Vous pouvez, bien sûr, l'utilisation extraction de flux comme std::cin >> buffer, mais cela ne lire qu'un seul « mot » de l'entrée, pas une ligne tout comme votre code précédent essayé de le faire.

1

Le code retourne tout ce qui était dans le tampon d'entrée à ce moment-là, très probablement rien. Pour vérifier le type de certaines données dans un fichier, exécutez votre programme et ajoutez "< monfichier" pour voir si les données sont chargées dans votre tampon.

Vous devez manipuler la console si vous voulez attendre des données.

+0

Plus 1 pour réellement essayer de répondre à la question plutôt que de dire à l'OP "ne fais pas ça, fais autre chose!" Vous essayez en fait de répondre à la question qu'il vous pose, ce qui est un grand OMI, parce que c'est quelque chose de différent de ce que préconise TOUT AUTRE POSTER. L'OP essaie de prendre AT MAXIMUM un certain nombre de caractères, dont aucune réponse (à partir de ce commentaire) aide sauf le vôtre. –

+0

Merci Florin. Basé sur votre post, je pense que j'ai compris ce que je cherchais à faire. Tout ce que j'avais à faire était d'ajouter un cin.get() avant la ligne avec cin.get (buffer, 79); et cela semble tout afficher. – Brundle

0

Pour obtenir une nouvelle ligne comme caractère de délimitation, vous devez utiliser

cin.get(buffer, 79, '\n'); 
Questions connexes