Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 9, zadanie domowe

Ostatnio zmodyfikowano 2015-12-13 05:54
Autor Wiadomość
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():

C/C++
#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?
P-141526
carlosmay
» 2015-12-06 19:46:26
C/C++
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
cin.clear();
 spróbuj w tej kolejności.
P-141531
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).
P-141532
carlosmay
» 2015-12-06 20:19:44
C/C++
cout << "Wprowadz liczbe: ";
cin >> a;
OKa = cin.good();
cin.clear();
while( cin.get() != '\n' ) // to zamiast cin.ingnore()
     continue;

P-141540
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.
P-141545
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.
P-141645
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ś?
P-141648
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...
P-141866
« 1 »
  Strona 1 z 1