¿Puede alguien me explique por qué mi salida es esto? Y ¿cómo iba a corregir mi salida?
-
27-09-2019 - |
Pregunta
En este trozo de código que consigue una potencia de
bbb 55 66 77 88
aaa
la salida espero y deseo es
bbb 55 66 77 88
bbb
porque ss
Reasignar de log[0]
a log[1]
.
Así que mi pregunta es ¿por qué es diferente la salida de lo que cabe esperar y cómo hacer yo
cambiarlo a lo que yo quiero?
int w,x,y,z;
stringstream ss (stringstream::in | stringstream::out);
string word;
string log[2];
log[0]="aaa 11 22 33 44";
log[1]="bbb 55 66 77 88";
ss<<log[0];
ss>>word;
int k=0;
ss>>w>>x>>y>>z;
k++;
ss<<log[k];
cout<<log[k]<<endl;
ss>>word;
cout<<word<<endl;
return 0;
Solución
Cuando
ss >> w >> x >> y >> z;
fue ejecutado, no hay contenido dejó de operar en y ss.good () devuelve falso, que expresa la necesidad de ss.clear llamada () con el fin de asegurar que todo está bien y podemos seguir adelante.
Sin embargo, teniendo en cuenta que lo hace
ss.clear();
ss<<log[k];
El contenido de ss será
aaa 11 22 33 44bbb 55 66 77 88
Si desea esta manera, está bien. Pero tal vez esperaba que contiene
bbb 55 66 77 88
que se realiza por
ss.str(log[k]);
ss.clear();
Otros consejos
Cuando se escribe a la stringstream la segunda vez que el puntero de entrada (tellg) se establece en -1 y la falla bit está establecido. Eso significa que ni el segundo de escritura ni la segunda lectura tienen éxito.