Thread View: pl.comp.lang.c
5 messages
5 total messages
Started by "M.M."
Thu, 12 Dec 2019 14:54
Piaskownica
Author: "M.M."
Date: Thu, 12 Dec 2019 14:54
Date: Thu, 12 Dec 2019 14:54
129 lines
1535 bytes
1535 bytes
Nie przewijajcie na dół, tam jest rozwiązanie: Zawsze byłem słaby z biblioteki standardowej w C++, programowałem w innych. Nie mogłem znaleźć błędu w poniższych kilku wierszach, pewnie wy znajdziecie. Jako pierwszy wiersz na standardowe wejście podajemy liczby np. 1 i 2. Jako drugi podajemy np.: 3 i 4. Program dwa razy robi to samo, wczytuje wiersz, tworzy strumień tekstowy i ze strumienia odczytuje do zmiennych x i y. Choć dwa razy robi to samo, to drugi raz nie działa prawidłowo. Straciłem z godzinę czasu żeby to wygrzebać z większego programu, zdiagnozować i poprawić :) Biblioteki trzeba znać :/ #include <iostream> #include <sstream> int main() { std::string str; std::istringstream ss; double x, y; std::getline( std::cin , str ); std::cout << "String: '" << str << "'" << std::endl; ss.str( str ); ss >> x >> y; std::cout << x << std::endl; std::cout << y << std::endl; std::getline( std::cin , str ); std::cout << "String: '" << str << "'" << std::endl; ss.str( str ); ss >> x >> y; std::cout << x << std::endl; std::cout << y << std::endl; return 0; } Pozdrawiam ------------------------------------------------------------ Odpowiedź: ss.str( str ); nie resetuje pozycji, trzeba wywołać jeszcze: ss.seekg(0);
Re: Piaskownica
Author: "M.M."
Date: Thu, 16 Jan 2020 09:06
Date: Thu, 16 Jan 2020 09:06
155 lines
2922 bytes
2922 bytes
On Thursday, January 16, 2020 at 1:01:09 PM UTC+1, herjohn wrote: > W dniu 2019-12-12 o 23:54, M.M. pisze: > > Nie przewijajcie na dół, tam jest rozwiązanie: > > > > Zawsze byłem słaby z biblioteki standardowej w C++, programowałem w innych. > > Nie mogłem znaleźć błędu w poniższych kilku wierszach, pewnie wy znajdziecie. > > Jako pierwszy wiersz na standardowe wejście podajemy liczby np. 1 i 2. Jako > > drugi podajemy np.: 3 i 4. Program dwa razy robi to samo, wczytuje wiersz, > > tworzy strumień tekstowy i ze strumienia odczytuje do zmiennych x i y. Choć > > dwa razy robi to samo, to drugi raz nie działa prawidłowo. Straciłem z > > godzinę czasu żeby to wygrzebać z większego programu, zdiagnozować i poprawić :) > > Biblioteki trzeba znać :/ > > > > #include <iostream> > > #include <sstream> > > > > int main() { > > std::string str; > > std::istringstream ss; > > double x, y; > > > > std::getline( std::cin , str ); > > std::cout << "String: '" << str << "'" << std::endl; > > ss.str( str ); > > ss >> x >> y; > > std::cout << x << std::endl; > > std::cout << y << std::endl; > > > > std::getline( std::cin , str ); > > std::cout << "String: '" << str << "'" << std::endl; > > ss.str( str ); > > ss >> x >> y; > > std::cout << x << std::endl; > > std::cout << y << std::endl; > > > > return 0; > > } > > > > > > Pozdrawiam > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------ > > Odpowiedź: > > > > ss.str( str ); > > nie resetuje pozycji, trzeba wywołać jeszcze: > > ss.seekg(0); > > > > > a nie chodzi o to, że po pierwszej operacji > ss >> x >> y; > zostają ustawione bity eof, fail i bad, które trzeba wyzerować > instrukcją ss.clear()? Prawdę powiedziawszy nie wiem, ale po seekg działa bez zarzutu. Pozdrawiam P.S. Przyjąłem sobie za punkt honoru pewne autonomiczne fragmenty kodu (coś ala biblioteki) pisać tylko z użyciem biblioteki standardowej i żałuję tego. Na co dzień piszę w QT, wygoda jaką dostarcza QT na każdym kroku jest nieoceniona.
Re: Piaskownica
Author: herjohn
Date: Thu, 16 Jan 2020 13:01
Date: Thu, 16 Jan 2020 13:01
131 lines
1861 bytes
1861 bytes
W dniu 2019-12-12 o 23:54, M.M. pisze: > Nie przewijajcie na dół, tam jest rozwiązanie: > > Zawsze byłem słaby z biblioteki standardowej w C++, programowałem w innych. > Nie mogłem znaleźć błędu w poniższych kilku wierszach, pewnie wy znajdziecie. > Jako pierwszy wiersz na standardowe wejście podajemy liczby np. 1 i 2. Jako > drugi podajemy np.: 3 i 4. Program dwa razy robi to samo, wczytuje wiersz, > tworzy strumień tekstowy i ze strumienia odczytuje do zmiennych x i y. Choć > dwa razy robi to samo, to drugi raz nie działa prawidłowo. Straciłem z > godzinę czasu żeby to wygrzebać z większego programu, zdiagnozować i poprawić :) > Biblioteki trzeba znać :/ > > #include <iostream> > #include <sstream> > > int main() { > std::string str; > std::istringstream ss; > double x, y; > > std::getline( std::cin , str ); > std::cout << "String: '" << str << "'" << std::endl; > ss.str( str ); > ss >> x >> y; > std::cout << x << std::endl; > std::cout << y << std::endl; > > std::getline( std::cin , str ); > std::cout << "String: '" << str << "'" << std::endl; > ss.str( str ); > ss >> x >> y; > std::cout << x << std::endl; > std::cout << y << std::endl; > > return 0; > } > > > Pozdrawiam > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------ > Odpowiedź: > > ss.str( str ); > nie resetuje pozycji, trzeba wywołać jeszcze: > ss.seekg(0); > a nie chodzi o to, że po pierwszej operacji ss >> x >> y; zostają ustawione bity eof, fail i bad, które trzeba wyzerować instrukcją ss.clear()?
Re: Piaskownica
Author: =?UTF-8?Q?Wojcie
Date: Fri, 17 Jan 2020 02:13
Date: Fri, 17 Jan 2020 02:13
165 lines
3666 bytes
3666 bytes
On Thursday, January 16, 2020 at 6:06:44 PM UTC+1, M.M. wrote: > On Thursday, January 16, 2020 at 1:01:09 PM UTC+1, herjohn wrote: > > W dniu 2019-12-12 o 23:54, M.M. pisze: > > > Nie przewijajcie na dół, tam jest rozwiązanie: > > > > > > Zawsze byłem słaby z biblioteki standardowej w C++, programowałem w innych. > > > Nie mogłem znaleźć błędu w poniższych kilku wierszach, pewnie wy znajdziecie. > > > Jako pierwszy wiersz na standardowe wejście podajemy liczby np. 1 i 2. Jako > > > drugi podajemy np.: 3 i 4. Program dwa razy robi to samo, wczytuje wiersz, > > > tworzy strumień tekstowy i ze strumienia odczytuje do zmiennych x i y. Choć > > > dwa razy robi to samo, to drugi raz nie działa prawidłowo. Straciłem z > > > godzinę czasu żeby to wygrzebać z większego programu, zdiagnozować i poprawić :) > > > Biblioteki trzeba znać :/ > > > > > > #include <iostream> > > > #include <sstream> > > > > > > int main() { > > > std::string str; > > > std::istringstream ss; > > > double x, y; > > > > > > std::getline( std::cin , str ); > > > std::cout << "String: '" << str << "'" << std::endl; > > > ss.str( str ); > > > ss >> x >> y; > > > std::cout << x << std::endl; > > > std::cout << y << std::endl; > > > > > > std::getline( std::cin , str ); > > > std::cout << "String: '" << str << "'" << std::endl; > > > ss.str( str ); > > > ss >> x >> y; > > > std::cout << x << std::endl; > > > std::cout << y << std::endl; > > > > > > return 0; > > > } > > > > > > > > > Pozdrawiam > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------ > > > Odpowiedź: > > > > > > ss.str( str ); > > > nie resetuje pozycji, trzeba wywołać jeszcze: > > > ss.seekg(0); > > > > > > > > > a nie chodzi o to, że po pierwszej operacji > > ss >> x >> y; > > zostają ustawione bity eof, fail i bad, które trzeba wyzerować > > instrukcją ss.clear()? > > Prawdę powiedziawszy nie wiem, ale po seekg działa bez zarzutu. > > Pozdrawiam > > P.S. > Przyjąłem sobie za punkt honoru pewne autonomiczne fragmenty kodu > (coś ala biblioteki) pisać tylko z użyciem biblioteki standardowej i > żałuję tego. Na co dzień piszę w QT, wygoda jaką dostarcza QT > na każdym kroku jest nieoceniona. Streamy C++ to jest porażka, modelowy przykład jak nie należy projektować API. Nie mówiąc o tym, że są wolne. Po prostu używać gdzie trzeba, z własnej woli nie dotykać nawet kijem. PS. To, że coś jest w standardzie, nie oznacza, że jest dobre. Znaczy jedynie tyle, że zostało przegłosowane. w.
Re: Piaskownica
Author: "M.M."
Date: Fri, 17 Jan 2020 02:51
Date: Fri, 17 Jan 2020 02:51
45 lines
1702 bytes
1702 bytes
On Friday, January 17, 2020 at 11:13:08 AM UTC+1, Wojciech Muła wrote: > > > a nie chodzi o to, że po pierwszej operacji > > > ss >> x >> y; > > > zostają ustawione bity eof, fail i bad, które trzeba wyzerować > > > instrukcją ss.clear()? > > > > Prawdę powiedziawszy nie wiem, ale po seekg działa bez zarzutu. > > > > Pozdrawiam > > > > P.S. > > Przyjąłem sobie za punkt honoru pewne autonomiczne fragmenty kodu > > (coś ala biblioteki) pisać tylko z użyciem biblioteki standardowej i > > żałuję tego. Na co dzień piszę w QT, wygoda jaką dostarcza QT > > na każdym kroku jest nieoceniona. > > Streamy C++ to jest porażka, modelowy przykład jak nie należy > projektować API. Nie mówiąc o tym, że są wolne. Po prostu używać > gdzie trzeba, z własnej woli nie dotykać nawet kijem. > > PS. To, że coś jest w standardzie, nie oznacza, że jest dobre. > Znaczy jedynie tyle, że zostało przegłosowane. > Zgadzam się całkowicie, dodam nawet jeszcze jedną rzecz. Jeśli coś jest w standardzie, to 'wszędzie' powinno się skompilować i działać poprawnie. Z biblioteką QT jest tak, że jeśli gdzieś działa, to działa bardzo dobrze i programista C++ ma wszelkie wygody, a jak nie działa, to nic programu w ogóle nie można skompilować. Swego czasu QT nie działało na windowsach w wersji 64bitowej - nie wiem czy teraz już działa. Pozdrawiam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads