Je voulais expérimenter avec Stringstream pour une mission, mais je suis un peu confus sur la façon dont cela fonctionne. J'ai fait une recherche rapide mais je n'ai trouvé rien qui répondrait à ma question.
Dis que j'ai un ruisseau avec une taille dynamique, comment saurais-je savoir quand arrêter d'écrire à la variable? p> et ma sortie serait: P> 2
++
asdf
3
*
c
c
3 Réponses :
vous obtenez le C code> à la fin, car vous ne testez pas si le flux est toujours bon après avoir effectué l'extraction:
while (ss >> var) // attempt extraction then test if stream is good
{
cout << var; // use result of extraction
}
Merci, je suppose que ma question aurait dû être formulée comme comment vérifier l'état du flux.
Il existe également une fonction de membre bien () qui teste si le flux peut être utilisé pour les opérations d'E / S. Ainsi, en utilisant ceci, le code ci-dessus peut être modifié en
Ceci reste incorrect dans le cas général: si vous essayez d'extraire un int code> et les caractères disponibles suivants de la mémoire tampon ne peuvent pas être lus comme un
int code>, l'extraction va échouer.
Le tandis que (SS) code> Condition Vérifiez dans votre code Vérifiez si la dernière lecture du flux a réussi ou non. Cependant, ce chèque va retourner vrai même lorsque vous avez lu le dernier mot de votre chaîne. Seule l'extraction suivante de
SS >> Var code> Dans votre code va rendre cette condition FAUX puisque la fin du flux a été atteinte et il n'y a rien à extraire dans la variable var. C'est la raison pour laquelle vous obtenez un «C» supplémentaire à la fin. Vous pouvez éliminer cela en changeant votre code comme suggéré par James McNellis. p>
Le fait que ce soit un stringstream ne change pas beaucoup de rien - vous le lisez comme si vous voulez tout autre flux.