Kysthos Temat założony przez niniejszego użytkownika  | 
Rozdział 9, zadanie domowe » 2015-12-06 19:38:00 Korzystam z dwóch komputerów: pcta z Windowsem i z Maca. W związku z tym, że ani na Linuxie, ani na Macu nie działa metoda strumienia std::cin.sync(), postanowiłem zadanie domowe z rozdziału 9 zrobić na trzy sposoby. Napisałem taki kod z użyciem metody cin.sync():  #include <iostream> using namespace std; int main() {     float a; float b; float c;     bool OKa; bool OKb; bool OKc;          cout << "Wprowadz liczbe: ";     cin >> a;     OKa = cin.good();     cin.clear();     cin.sync();          cout << "Wprowadz liczbe: ";     cin >> b;     OKb = cin.good();     cin.clear();     cin.sync();          cout << "Wprowadz liczbe: ";     cin >> c;     OKc = cin.good();     cin.clear();     cin.sync();          cout << "Liczba pierwsza to: " << a << ". Wczytano? " << OKa << "." << endl;     cout << "Liczba druga to: " << b << ". Wczytano? " << OKb << "." << endl;     cout << "Liczba trzecia to: " << c << ". Wczytano? " << OKc << "." << endl;          return 0;      } Na Windowsie wszystko działa w porządku.  Na Macu oczywiście musiałem zmodyfikować kod ze względu na wyżej wspomnianą metodę cin.sync(). Próbowałem zmodyfikować wyżej zamieszczony kod na dwa sposoby:  1) wszystkie metody cin.sync() zamieniłem na cin.ignore( 1000, '\n' ); 2) pod #include <iostream> dodałem #include <limits>, a wszystkie metody cin.sync() zamieniłem na cin.ignore( numeric_limits < streamsize >::max(), '\n' ); Wszystkie trzy kody testowałem na przykładowych danych wejściowych z zadania domowego z rozdziału 9. Na Windowsie każdy kod działał tak, jak powinien. Problem pojawia się na Macu podczas testowania dwóch zmodyfikowanych kodów: gdy wprowadzam trzecią wartość z zadania domowego, czyli "33.22nie", wyświetlają się następujące dane wyjściowe: "Liczba trzecia to: 0. Wczytano? 0.". Jeżeli natomiast dodam spację pomiędzy liczbą a słowem, czyli "33.22 nie", wtedy działa i wyświetla się: "Liczba trzecia to: 33.22. Wczytano? 1.". Jak wspomniałem, na Windowsie ten problem nie występuje. Czy mógłby mi ktoś wytłumaczyć, dlaczego tak się dzieje, i wskazać, gdzie popełniam błąd?  | 
 | 
carlosmay  | 
» 2015-12-06 19:46:26 cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear();
   spróbuj w tej kolejności.  | 
 | 
Kysthos Temat założony przez niniejszego użytkownika  | 
» 2015-12-06 19:53:45 Niestety, w takiej kolejności program przy próbie wpisania drugiej przykładowej wartości, czyli "tak 123", nic nie wczytuje i pomija wczytywanie trzeciej liczby (sprawdzałem zarówno na Windowsie, jak i na Macu).  | 
 | 
carlosmay  | 
» 2015-12-06 20:19:44 cout << "Wprowadz liczbe: "; cin >> a; OKa = cin.good(); cin.clear(); while( cin.get() != '\n' )       continue;
 
   | 
 | 
Kysthos Temat założony przez niniejszego użytkownika  | 
» 2015-12-06 20:33:03 Dalej to samo: na Windowsie zapis, który zaproponowałeś, działa, a na Macu dane wejściowe "33.22nie" bez spacji nadal nie wczytują liczby (zapis ze spacją wczytuje).  Dodam, że zarówno na Windowsie, jak i na Macu korzystam z Code::Blocks w wersji 13.12.  | 
 | 
Kysthos Temat założony przez niniejszego użytkownika  | 
» 2015-12-08 22:57:34 Sprawdzałem to dzisiaj jeszcze na Linuxie (Xubuntu) i wszystko działa, jak należy. Tylko na Macu występuje wyżej opisany przeze mnie problem.   | 
 | 
carlosmay  | 
» 2015-12-09 01:08:00 Wygląda jakby C::B na Macu nie obsługiwał wszystkich funkcji z klasy  istream . Próbowałeś XCode? Zobacz może to wina kompilatora? Może w opcjach coś?  | 
 | 
Kysthos Temat założony przez niniejszego użytkownika  | 
» 2015-12-13 05:54:50 W końcu sprawdziłem i w Xcode jest taki sam rezultat – zapis bez spacji wywala 0, a ze spacją – 1. W C::B na Macu mam ten sam domyślny kompilator, co na pozostałych systemach: GNU GCC Compiler. Próbowałem zmieniać kompilator, ale chyba GNU GCC jest jedynym, który mam zainstalowany, bo tylko z nim kompiluje mi program. Z grzebaniem w opcjach mam taki problem, że jeszcze jestem dosyć zielony i też nie do końca wiem, czego miałbym szukać... No ale trudno, najwyżej będę się uczył raczej na Windowsie i Linuxie...  | 
 | 
|  « 1 »  |