2017-09-25 6 views
0

Je suis très novice en programmation et je regardais ce morceau de code, essayant de comprendre comment cela fonctionne. Ma compréhension est, que le début de chaque cycle de la boucle while le programme attend une entrée, et si cette entrée est autorisée la boucle est exécutée. Est-ce exact? Si c'est le cas, pourquoi le programme affiche-t-il le '$' si un '!' est tapé, vu comment dans ce cas la commande cout dans le cas else n'est pas activée?Besoin d'aide concernant cin.get et cin.putback

int main() { 
char ch; 
cout << "enter a phrase: "; 
while (cin.get(ch)) { 
    if (ch == '!') cin.putback('$'); 
    else cout << ch; 
    while (cin.peek() == `#') cin.ignore(1,'#'); 
    } 
return 0; 
} 

Sortie: entrez une phrase: #! Est # le! Temps # pour! Fun #! maintenant $ $ estle

$ amusant de $
+0

Je ne suis pas un expert C++, mais je suppose que 'cin.putback' remplace le dernier caractère tapé dans le flux' cin'. Il n'a en effet rien à voir avec 'cout'. – Kilazur

Répondre

2
vienne remplir les rangs

S'il vous plaît voir documentation pour la méthode putback:

istream & putback (char c);

caractère: Reporte

Les tentatives pour diminuer l'emplacement actuel dans le flux par un caractère, ce qui rend le dernier caractère extrait du flux nouveau disponible à extraire par des opérations d'entrée.

Si le programme lit un caractère '!', il remet au courant un caractère '$', qui est lu à la prochaine itération de la boucle et imprimé.

+0

Donc, si je vous comprends bien, alors cin.putback ('$') dira que la prochaine fois qu'un personnage dans mon programme est censé être lu, ce caractère sera '$'? –

+0

@ElDuderino Oui. Mais notez que (à partir de la même documentation): le comportement 'putback' dépend de l'objet tampon de flux particulier associé au flux. Différents types de tampons peuvent échouer, être ignorés ou écraser le caractère à cette position. – Mikhail