🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

5 total messages Started by "M.M." Thu, 12 Dec 2019 14:54
Piaskownica
#291421
Author: "M.M."
Date: Thu, 12 Dec 2019 14:54
129 lines
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
#291476
Author: "M.M."
Date: Thu, 16 Jan 2020 09:06
155 lines
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
#291475
Author: herjohn
Date: Thu, 16 Jan 2020 13:01
131 lines
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
#291477
Author: =?UTF-8?Q?Wojcie
Date: Fri, 17 Jan 2020 02:13
165 lines
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
#291478
Author: "M.M."
Date: Fri, 17 Jan 2020 02:51
45 lines
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