wektor double do stringa, a ten do Messageboxa, WinAPI

0
...
std::vector<double> vec(std::istream_iterator<double>(file), {});
std::sort(vec.begin(), vec.end());

std::string s = "";

for (int i = 0; i < vec.size(); ++i)
{
	s += (double)vec[i];
	s+="\n";
}
char buff[100];
sprintf_s(buff, s.c_str());
MessageBox(0, buff, "Tablica wynikow", MB_OK);
file.close();
...

66527f7b52.png

Mam tu wektor double'ow i jak widać z nim wszystko jest ok. Zawiera tam jakieś dane. Teraz wpisuję je do stringa i chcę je wyświetlić w MessageBoxie. I tu jest problem, bo wyświetlają mi się jakieś chińskie napisy.

88800f4031.png

Czemu tak się dzieje?

2

skoro potrafisz korzystac z debuggera, to zobacz co zawiera zmienna s (wydaje mi sie, ze ta petla jest bledna...) a pozniej co masz w buff (w tej tablicy)

4
s += (double)vec[i];
  1. Jaki jest sens rzutować double na double?
  2. Jaki jest sens dodać double do std::string?
s += to_string(vec[i])
4
s += (double)vec[i];

Konwertujesz wartości double do całkowitych char i dodajesz je na koniec stringa jako wartości ASCII (a raczej tablicy znaków używanej przez Twój locale). Chcesz zamienić double na string - użyj std::to_string

1

Tylko przy okazji (bo inni już odpowiedzieli) -- nie dałoby się zrezygnować z buff i napisać od razu tak:

MessageBox(0, s.c_str(), "Tablica wynikow", MB_OK);
0
std::ostringstream result;
std::ostream_iterator<double> out_it (result, ", ");
std::copy (vec.begin(), vec.end(), out_it );
MessageBox(0, result.str().c_str(), "Tablica wynikow", MB_OK);

1 użytkowników online, w tym zalogowanych: 0, gości: 1