• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ obiekt cin, niepoprawna wartość ?

Object Storage Arubacloud
0 głosów
480 wizyt
pytanie zadane 13 stycznia 2017 w C i C++ przez Ditrix Mądrala (5,650 p.)

Witam

Mam taki kod.

#include <iostream>

using namespace std;

int main()
{
    int liczba;
    int suma=0;

    while(cin >> liczba)
    {
        suma += liczba;
    }

    cout << "Ostatnia liczba to: " << liczba << endl;
    return 0;
}

Według tego, co przeczytałem na końcu po podaniu liczby niezgodnej z typem int, powinna mi się wyświetlić ostatnia przypisania wartość do zmiennej liczba. Jednak wyświetla się zero bezwzględu jaką wartość podam ostatnią. Jaki może być problem ?

1
komentarz 13 stycznia 2017 przez DragonCoder Nałogowiec (36,500 p.)

what the fuck? Co to za petla..

#include <iostream>
 
 
int main()
{
    int liczba;
    int suma=0;
    std::cin >> liczba
 
    while(liczba)
    {
        suma += liczba;
    }
 
    std::cout << "Ostatnia liczba to: " << liczba <<"\n";
    return 0;
}

 

komentarz 13 stycznia 2017 przez Ditrix Mądrala (5,650 p.)
Przykład z książki, zwykły kod do nauki. Tyle, że książce jest napisane iż kod powinien działać normalnie, wyświetlając ostatnią przypisaną wartość, a nie 0, jak w moim przypadku. Zatrzymałem się na tym, nie wiem co źle.
komentarz 13 stycznia 2017 przez DragonCoder Nałogowiec (36,500 p.)
A co to za ksiazka? Jak`Szkola programowania od party, to podaj strone i zerkne zaraz
komentarz 13 stycznia 2017 przez Ditrix Mądrala (5,650 p.)
Tak Szkoła Programowania

Strona 948 - 949, Listing 17.11

1 odpowiedź

0 głosów
odpowiedź 13 stycznia 2017 przez playerony Pasjonat (15,240 p.)

A nie miało to przypadkiem wyglądać tak? 


#include <iostream>

using namespace std;

int main()
{
    int liczba;
    int suma=0;

    while(cin >> liczba)
    {
        suma = liczba;
    }

    cout << "Ostatnia liczba to: " << suma << endl;
    return 0;
}

 

komentarz 13 stycznia 2017 przez Ditrix Mądrala (5,650 p.)
Niee, w książce jest tak jak ja napisałem. Według niej, strumień wejścia pobiera znaki, aż napotka znak nowej linii lub nieprawidłowy znak danego typu. I jeśli wpiszę liczbę 123Z do typu int, to powinno przypisać mi do liczby 123, a Z zostanie wtedy w strumieniu.
komentarz 13 stycznia 2017 przez DragonCoder Nałogowiec (36,500 p.)
Nawet po przepisaniu calego kodu z ksiazki, codde::blocks nie dziala. Wiem ze utor uzywa VisualStudio a ja C::B, moze to jest przyczyna. Teraz mam rozkminke nad tym zadaniem :D
komentarz 13 stycznia 2017 przez Ditrix Mądrala (5,650 p.)
Na moje różne programy mogą inaczej interpretować ten kod. Też używam C::B. W sumie autor często wspomina o różnych sposobach interpretacji kodu.

Wolałbym jednak, aby kod wykonywał się jak w książce, jest to bardziej zrozumiałe i przyjemniejsze ^^
komentarz 13 stycznia 2017 przez DragonCoder Nałogowiec (36,500 p.)
Autor juz na pierwszych stronach wspomina o tym, szzczerze mowiac, to zastanawiam sie czy nie uzyc tu zmiennej typu bool, i wyswietlac cos w petli gdy bool przyjmie prawde :D. Albo Tablice z iteracja to druga mysl tak na szybkiego :D. Chociaz wiadomo, pozniej musisz wyswietlic iteracje i je sumowac, ale mysle ze poblemu by nie bylo. Sprobuj obu pomyslow i powiec czy dziala, ja jutro to przepisze na jeden z nich i sprawdze jeszcze jak VS odbiera przyklad z ksiazki
komentarz 13 stycznia 2017 przez Ditrix Mądrala (5,650 p.)

Nie wiem czy dokładnie o to Ci chodziło.

#include <iostream>

using namespace std;

int main()
{
    int liczba[5];
    int suma=0;
    int i=0;
    while(cin >> liczba[i] && i<4)
    {
        suma += liczba[i];
        i++;
    }

    cout << "Ostatnia liczba to: " << liczba[i] << endl;
    return 0;
}
#include <iostream>

using namespace std;

int main()
{
    int liczba;
    int suma=0;
    bool flaga = true;
    while(flaga==true)
    {
        cout << "Podaj liczbe: ";
        if(cin >> liczba)
                cout << "Liczba: " << liczba << endl;
        else
            flaga = false;
    }

    cout << "Ostatnia liczba to: " << liczba << endl;
    return 0;
}

Jednak wszędzie to samo. Operator<< obiektu cin po napotkaniu nieprawidłowego znaku wysyła 0. Próbowałem nawet z przypisanymi wartościami do tablicy. Po napotkaniu błędu wykonuje się przypisanie do zmiennej liczby 0. Obsługa błędów w tym przypadku jest dla mnie fatalna. Ale to moje zdanie ^^

Podobne pytania

0 głosów
1 odpowiedź 316 wizyt
pytanie zadane 28 grudnia 2016 w SPOJ przez Suiko Początkujący (350 p.)
0 głosów
4 odpowiedzi 209 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...