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

Sprawdzanie "Zadań domowych" , np."Obsługa strumienia wejściowego"

Ostatnio zmodyfikowano 2017-03-30 09:07
Autor Wiadomość
Kurzciel
Temat założony przez niniejszego użytkownika
Sprawdzanie "Zadań domowych" , np."Obsługa strumienia wejściowego"
» 2017-03-28 20:15:03
Dobry wieczór,

Jestem nowym użytkownikiem forum. Właśnie przerabiam lekcje z kursu "C/C++", właśnie się zatrzymałem na "Obsługa strumienia wejściowego", mam zamiar zresztą wrócić do początku (żeby dobrze wchłonąć temat). Moje wątpliwości budzą zadania domowe. Mianowicie, nie wiem, czy zrobiłem je dobrze, czy może jednak coś jest do poprawki. Jak wiecie, samodzielne ocenianie pracy nie jest w 100% obiektywne. Może ten wątek, jeśli zaawansowani użytkownicy byliby zainteresowani, mógłby być takim "miejscem" gdzie starsi koledzy pomagają młodszym? Sam mam zapisane już 4 zadania domowe zapisane i nie jestem pewien, czy wykonałem je dobrze..

Przykładowo, w tej chwili zmagam się z tym:

C/C++
#include <iostream>
int main()

{
    float a;
    float b;
    float c;
   
    std::cout << "Liczba pierwsza to:";
    std::cin >> a;
    std::cout << "Wczytano?" << std::cin.good() << std::endl;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Liczba druga to:";
    std::cin >> b;
    std::cout << "Wczytano?" << std::cin.good() << std::endl;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Liczba trzecia to:";
    std::cin >> c;
    std::cout << "Wczytano?" << std::cin.good() << std::endl;
    std::cin.clear();
    std::cin.sync();
   
    return 0;
}

Gwoli wyjaśnienia, kod wygląda tak pokracznie, bo to moje pierwsze kroki w świecie programowania, a nie chciałem z przykładów umieszczonych w tym rozdziale nic kopiować. Wolałem od "." do "." polecieć sam i chyba mnie przerosło..

Miłego wieczoru.
P-159546
karambaHZP
» 2017-03-28 21:32:47
W tym zadaniu trzeba jeszcze zadeklarować zmienne logiczne
bool
 do przechowania stanów strumienia
i na sam koniec dopiero wypisać wszystkie przechowywane wartości.
P-159551
Kurzciel
Temat założony przez niniejszego użytkownika
» 2017-03-29 11:27:46

Myślę, że poprawiłem zgodnie z zaleceniem powyżej (chyba, że źle zrozumiałem zalecenie). Po wpisaniu wartości na samym końcu wyświetlają się przechowywane wartości i czy są one dobre.. Jednak dalej mam problem z "bool", nie mam pojęcia po prostu w jaki sposób go użyć i podejrzewam, że to właśnie z tego wynika kłopot, w którym mimo złej wartości "tak 123", mamy wynik "1". W poprzedniej wersji nie było tego kłopotu..


C/C++
#include <iostream>
#include <stdlib.h>
int main()

{
    float a;
    float b;
    float c;
   
    std::cout << "Liczba pierwsza to:";
    std::cin >> a;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Liczba druga to:";
    std::cin >> b;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Liczba trzecia to:";
    std::cin >> c;
    std::cin.clear();
    std::cin.sync();
   
   
    std::cout << " \n Pierwsza liczba to: " << a;
    std::cout << " \t Wczytano? " << std::cin.good() << std::endl;
    std::cout << "Druga liczba to: " << b;
    std::cout << " \t Wczytano? " << std::cin.good() << std::endl;
    std::cout << "Trzecia liczba to: " << c;
    std::cout << " \t Wczytano? " << std::cin.good() << std::endl;
   
    system( "PAUSE" );
    return 0;
}
P-159564
carlosmay
» 2017-03-29 15:47:54
cin.good()
 zwraca przy wypisywaniu
1
, bo stan strumienia jest poprawny po ostatnim wczytywaniu. Przeczytaj jeszcze raz wskazówkę kolegi karambaHZP.
P-159573
Kurzciel
Temat założony przez niniejszego użytkownika
» 2017-03-29 18:48:56
C/C++
#include <iostream>
#include <stdlib.h>
int main()

{
    float a;
    float b;
    float c;
   
    bool A = std::cin.good();
    bool B = std::cin.good();
    bool C = std::cin.good();
   
    std::cout << "Liczba pierwsza to:";
    std::cin >> a;
    std::cin >> A;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Liczba druga to:";
    std::cin >> b;
    std::cin >> B;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Liczba trzecia to:";
    std::cin >> c;
    std::cin >> C;
    std::cin.clear();
    std::cin.sync();
   
   
    std::cout << "Pierwsza liczba to: " << a;
    std::cout << " \t Wczytano? " << A << std::endl;
    std::cout << "Druga liczba to: " << b;
    std::cout << " \t Wczytano? " << B << std::endl;
    std::cout << "Trzecia liczba to: " << c;
    std::cout << " \t Wczytano? " << C << std::endl;
   
    system( "PAUSE" );
    return 0;
}

Panowie, prawie się udało, ogólnie zastosowałem "bool", z tym, że teraz przy prawidłowej wartości otrzymuje wynik "0", a błędnej (tekstowej) "1".
P-159578
Janusz2
» 2017-03-29 19:48:34
Hej, na wstępie muszę zaznaczyć, że również się uczę i mogę pisać bzdury :)
Twój program nie działa tak jak myślisz. bool niczego nie sprawdza, Ty sam nadajesz mu wartość 0 lub 1.

C/C++
bool A = std::cin.good(); //Tutaj definiujesz A i nieświadomie nadajesz mu wartość 1 (cin.good() sprawdza czy typ ostatniej wprowadzonej wartości jest zgodny z jej typem w deklaracji, nie było wcześniej żadnego cin, więc jest ok -czyli 1)
std::cin >> A; //Tutaj wprowadzasz nową wartość dla A, poprzednia (1) idzie w zapomnienie. Jeśli będzie to wartość różna od zera wtedy bool pokaże 1, jeśli będzie to zero, bool pokaże 0.
std::cout << " \t Wczytano? " << A << std::endl; // Tutaj wypisujesz na ekran wartość która w danej chwili kryje się pod A.

Ja również mam pytanie odnośnie bool, gdy próbujemy mu nadać wartość 'a' (w rzeczywistości 'a' to jakaś liczba) dlaczego pokazuje 0 a nie 1?
P-159582
Kurzciel
Temat założony przez niniejszego użytkownika
» 2017-03-29 20:58:01
Z tego, co ja zrozumiałem, 'bool' ma zapamiętywać, czy dane wejściowe są poprawne i na sam koniec dać temu wyraz (1 - poprawne, 0 - niepoprawne, np. tekst). Przepuść mój kod w CodeBlock, odpal .exe - kiedy podasz wartości np. L1 = 17, L2 = nie, L3 = 123 tak, dostaniesz odpowiedzi dobre (w sensie, program poda wartości dobrze przeczytane), ale "Wykonano" już złe: L1= 0, L2= 1, L3=0, a powinno być chyba na odwrót ;)
P-159587
Panniikt
» 2017-03-29 21:35:17
Mam podobny problem do was Panowie. Mianowicie nie daję sobie rady ze zmienna bool. Może ktoś z bardziej ogarniętych podrzuci jakieś rozwiązanie?
C/C++
#include <iostream>

using namespace std;

int main( int argc, char * argv[] )
{
    float a, b, c;
   
   
   
    cout << "podaj pierwsza liczbe rzeczywista: " << endl;
    cin >> a;
    cin.good();
    cin.clear();
    cin.sync();
   
   
   
    cout << "podaj druga liczbe rzeczywista: " << endl;
    cin >> b;
    cin.good();
    cin.clear();
    cin.sync();
   
   
    cout << "podaj trzecia liczbe rzeczywista: " << endl;
    cin >> c;
    cin.good();
    cin.clear();
    cin.sync();
   
    cout << "pierwsza liczba to ; " << a << " wczytano? " << endl;
    cout << "druga liczba to ; " << b << " wczytano? " << endl;
    cout << "trzecia liczba to : " << c << " wczytano? " << endl;
   
   
    return 0;
   
   
}
P-159588
« 1 » 2
  Strona 1 z 2 Następna strona