Ĺadny brzuch
Pod linuxem w g++ kompiluje kod: #include <iostream>
using namespace std;
int main()
{
 ios_base::sync_with_stdio(0);         // pewnie z tym coś nie gra
 int x;
 cin >> x;
 cout << x;
 return 0;
}
no i sie wszystko dobrze kompiluje ale po wczytaniu liczby x i zatwierdzeniu enterem nic sie nie dzieje moge dalej wpisywać jakieś dane.
Użytkownik logic edytował ten post 12 kwiecień 2006, 16:10
Po pierwsze nie jestem pewien po to robisz. ;)
Po drugie u mnie działa w porządku.
Po pierwsze nie jestem pewien po to robisz. ;)
Po drugie u mnie działa w porządku.
To podaj konkretnie ten kod, w którym Ci coś nie działa. Chyba, że już w tym tak jest.
Nie jestem pewny, ale chyba poprzez tą funkcje...
ios_base::sync_with_stdio(0);
...wyłącza się synchronizacja strumieni I/O i właśnie dlatego dzieje się tak jak opisujesz. Ale gdy skierujesz dane z pliku powinno być w porządku.
To właśnie w tym kodzie co podałem są takie bugi, a bardzo podobny kod jest tu: Potyczki Algorytmiczne// gdzieś w środku strony.
To właśnie w tym kodzie co podałem są takie bugi, a bardzo podobny kod jest tu: Potyczki Algorytmiczne// gdzieś w środku strony.
Podobny :huh: W nim nie ma problemu czyli podaj ten z którym jest nikt nie bedzie zgadywał
Ku.ririn: Ciekawe co według Ciebie znaczy "synchronizacja strumieni I/O". ;)
W każdym razie funkcja ta powoduje, że operacje na plikach przeprowadzane przy użyciu funkcji z iostream będą zsynchronizowane (lub nie) z tymi z C, czyli z cstdlib. Dlatego ta linijka raczej nie powinna mieć żadnego znaczenia dla przykładu, który podał założyciel tego tematu.
Użytkownik Chmurek edytował ten post 12 kwiecień 2006, 19:51
Chmurek:
Trochę o tym poczytałem i w każdym źródle jest napisane inaczej. W jednym pisze to co ty napisałeś (tylko, że nie chodzi tylko o pliki, ale o wszystkie operacje I/O), a w innym, że strumienie i funkcje z Standardowej Biblioteki C++ też mogą być nie synchronizowane (czyli np. cin i cout). Więc już sam nie wiem jak jest.
Użytkownik Ku.ririn edytował ten post 13 kwiecień 2006, 13:08
Ale co rozumiesz przez "brak synchronizacji między cin i cout"? I nie chodzi mi o to, że nie to nie są funkcje. ;)
W każdym razie jestem pewien, że to służy do tego co napisałem.
Ale co rozumiesz przez "brak synchronizacji między cin i cout"? I nie chodzi mi o to, że nie to nie są funkcje. ;)
W każdym razie jestem pewien, że to służy do tego co napisałem.
Chodzi mi o to, że np. cout, może być wywołane przed cin, choć w kodzie może być napisane inaczej. (Tak na marginesie to napisałem strumienie i funkcje). Ale i tak o to tutaj nie chodzi, bo poprostu cin ładuje wszystko do bufora i nie da się jego opróżnić (przynajmniej enterem). Na jednej angielskiej stronce coś o tym było napisane, ale nie dokońca zrozumiałem.
Użytkownik Ku.ririn edytował ten post 14 kwiecień 2006, 12:17
Sorry, ale raczej trochę bzdurnie piszesz. ;)
Jaka synchronizacja miałaby być między cin i cout? Przecież te obiekty operują na różnych strumieniach - pierwszy na wejściu, drugi na wyjściu, więc nie muszą być w żaden sposób synchronizowane.
A co do "cin ładuje wszystko do bufora" to też bardzo enigmatyczne stwierdzenie. ;)
Użytkownik Chmurek edytował ten post 14 kwiecień 2006, 14:04
Sorry, ale raczej trochę bzdurnie piszesz. ;)
Jaka synchronizacja miałaby być między cin i cout? Przecież te obiekty operują na różnych strumieniach - pierwszy na wejściu, drugi na wyjściu, więc nie muszą być w żaden sposób synchronizowane.
A co do "cin ładuje wszystko do bufora" to też bardzo enigmatyczne stwierdzenie. ;)
No tu masz racje. Poprostu przeczytałem coś niedokładnie i odrazu napisałem posta (choć się z tym nie zgadzałem :D ).
Sync_with_stdio zmienia tryb buforowania na jakiś inny, który opróżni bufor dopiero wtedy kiedy będzie on pełny (możesz to sprawdzić wpisując 256 cyfr) i dlatego to powoduje problemy z cin (nie chce on skończyć działania dopóki bufor nie będzie pełny).
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
no i sie wszystko dobrze kompiluje ale po wczytaniu liczby x i zatwierdzeniu enterem nic sie nie dzieje moge dalej wpisywać jakieś dane.
Użytkownik logic edytował ten post 12 kwiecień 2006, 16:10
Po pierwsze nie jestem pewien po to robisz. ;)
Po drugie u mnie działa w porządku.
Po pierwsze nie jestem pewien po to robisz. ;)
Po drugie u mnie działa w porządku.

To podaj konkretnie ten kod, w którym Ci coś nie działa. Chyba, że już w tym tak jest.
Nie jestem pewny, ale chyba poprzez tą funkcje...
ios_base::sync_with_stdio(0);
...wyłącza się synchronizacja strumieni I/O i właśnie dlatego dzieje się tak jak opisujesz. Ale gdy skierujesz dane z pliku powinno być w porządku.
To właśnie w tym kodzie co podałem są takie bugi, a bardzo podobny kod jest tu: Potyczki Algorytmiczne// gdzieś w środku strony.
To właśnie w tym kodzie co podałem są takie bugi, a bardzo podobny kod jest tu: Potyczki Algorytmiczne// gdzieś w środku strony.
Podobny :huh: W nim nie ma problemu czyli podaj ten z którym jest nikt nie bedzie zgadywał
Ku.ririn: Ciekawe co według Ciebie znaczy "synchronizacja strumieni I/O". ;)
W każdym razie funkcja ta powoduje, że operacje na plikach przeprowadzane przy użyciu funkcji z iostream będą zsynchronizowane (lub nie) z tymi z C, czyli z cstdlib. Dlatego ta linijka raczej nie powinna mieć żadnego znaczenia dla przykładu, który podał założyciel tego tematu.
Użytkownik Chmurek edytował ten post 12 kwiecień 2006, 19:51
Chmurek:
Trochę o tym poczytałem i w każdym źródle jest napisane inaczej. W jednym pisze to co ty napisałeś (tylko, że nie chodzi tylko o pliki, ale o wszystkie operacje I/O), a w innym, że strumienie i funkcje z Standardowej Biblioteki C++ też mogą być nie synchronizowane (czyli np. cin i cout). Więc już sam nie wiem jak jest.
Użytkownik Ku.ririn edytował ten post 13 kwiecień 2006, 13:08
Ale co rozumiesz przez "brak synchronizacji między cin i cout"? I nie chodzi mi o to, że nie to nie są funkcje. ;)
W każdym razie jestem pewien, że to służy do tego co napisałem.
Ale co rozumiesz przez "brak synchronizacji między cin i cout"? I nie chodzi mi o to, że nie to nie są funkcje. ;)
W każdym razie jestem pewien, że to służy do tego co napisałem.
Chodzi mi o to, że np. cout, może być wywołane przed cin, choć w kodzie może być napisane inaczej. (Tak na marginesie to napisałem strumienie i funkcje). Ale i tak o to tutaj nie chodzi, bo poprostu cin ładuje wszystko do bufora i nie da się jego opróżnić (przynajmniej enterem). Na jednej angielskiej stronce coś o tym było napisane, ale nie dokońca zrozumiałem.
Użytkownik Ku.ririn edytował ten post 14 kwiecień 2006, 12:17
Sorry, ale raczej trochę bzdurnie piszesz. ;)
Jaka synchronizacja miałaby być między cin i cout? Przecież te obiekty operują na różnych strumieniach - pierwszy na wejściu, drugi na wyjściu, więc nie muszą być w żaden sposób synchronizowane.
A co do "cin ładuje wszystko do bufora" to też bardzo enigmatyczne stwierdzenie. ;)
Użytkownik Chmurek edytował ten post 14 kwiecień 2006, 14:04
Sorry, ale raczej trochę bzdurnie piszesz. ;)
Jaka synchronizacja miałaby być między cin i cout? Przecież te obiekty operują na różnych strumieniach - pierwszy na wejściu, drugi na wyjściu, więc nie muszą być w żaden sposób synchronizowane.
A co do "cin ładuje wszystko do bufora" to też bardzo enigmatyczne stwierdzenie. ;)
No tu masz racje. Poprostu przeczytałem coś niedokładnie i odrazu napisałem posta (choć się z tym nie zgadzałem :D ).
Sync_with_stdio zmienia tryb buforowania na jakiś inny, który opróżni bufor dopiero wtedy kiedy będzie on pełny (możesz to sprawdzić wpisując 256 cyfr) i dlatego to powoduje problemy z cin (nie chce on skończyć działania dopóki bufor nie będzie pełny).