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

Lekcja 15 do...while

Ostatnio zmodyfikowano 2014-10-07 23:43
Autor Wiadomość
Czdum
Temat założony przez niniejszego użytkownika
Lekcja 15 do...while
» 2014-10-07 19:01:57
Podczas próby wykonania pierwszego zadania z tej lekcji, pojawił się w moim programie pewien problem, który nie mam pomysłu jak rozwiązać, mianowicie:
program działa poprawnie, dopóki wpisujemy wszystkie znaki i liczby, za wyjątkiem zera.

Jeśli ktoś mógłby mi wytłumaczyć co zrobić żeby działał poprawnie będę wdzięczny

C/C++
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
float liczba;
bool wyznacznik;
int main()
{
    do {
        cout <<( "wpisz liczbe" ) << endl;
        cin >> liczba;
        wyznacznik = liczba;
        cout <<( "Wpisana liczba to " ) << liczba << endl;
        cin.clear();
        cin.sync();
    }
    while( wyznacznik == 0 );
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
P-118079
Rashmistrz
» 2014-10-07 20:59:40
Program nie działa poprawnie!
Wypisuje "Wpisana liczba to 0"
jak wpiszemy tekst!

Powinien nie wypisać nic lub coś
w stylu "Błąd. Podaj ponownie!".

W zadaniu jest napisane:
Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów.

Więc, poszukaj pomocy w tym rozdziale:
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-1​/Obsluga-strumienia-wejscioweg​o​/12

P-118104
FIGUS
» 2014-10-07 21:04:53
Po pierwsze:
Zmienne tworzymy w funkcji głównej "int main()",
więc przenosimy
C/C++
float liczba;
bool wyznacznik;
do środka "int main()"

Po drugie:
Chyba mylisz C++ z C. W "std::cout" przy tekście nie musimy wpisywać nawiasów.

Po trzecie:
W zadaniu było podane, aby w przypadku wpisania błędnych danych wrócić do punktu 1,
a 0 nie jest przecież nieprawidłowym danym. Nieprawidłowe dane może być np. wtedy, gdy wpiszemy zamiast
cyfr "abcdef". Dlatego skorzystaj z "std::cin.good()".

Zrób dwie pętle, jedna będzie twoim menu głównym, druga będzie wczytywac liczby dopóki "std::cin.good() == 1",
czyli liczba została wczytana poprawnie.(jedna pętla w drugiej, menu - zewnętrzna, wpisywanie - wewnętrzna)


PS.Reszta przyszłych programistów: proszę mnie poprawić, jeśli coś źle doradziłem ;)
P-118107
Rashmistrz
» 2014-10-07 21:56:54
@FIGUS
-Na razie jest przy pierwszym podpunkcie zadania, a ty "zaspoilerowałeś" rozwiązania kolejnych. :F

std::cin.good() == 1

-Ja polecam wpisywać true:
std::cin.good() == true


//Ciekawostka:
//http://cpp0x.pl/kursy/Kurs-C++​/Poziom-1/Operacje-porownania/14
//"Co jest prawdą, a co fałszem?"

Zmienne tworzymy w funkcji głównej "int main()"
-Zmienne tak tworzone poza funkcjami są zmiennymi globalnymi
 i takie zmienne zmienne są dostępne z każdego miejsca w programie.
WAŻNE:
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-2​/Funkcje-pierwsze-starcie/291:
"Zmienne wewnątrz funkcji, czyli zasięg widzenia zmiennych"
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-2​/Przekazywanie-tablic-jednowym​iarowych-do-funkcji​/324:
Pierwszy akapit.
//A to już trochę mniej ważne :F
Zmienne globalne - zło?

Reszta przyszłych programistów...
To o mnie mowa. ^_^

@Czdum
Widzę, że nie rozpocząłeś kursu z zerową wiedzą:
C/C++
system( "PAUSE" );
return EXIT_SUCCESS;
Na razie nie używaj zmiennych globalnych i zrób jak doradził FIGUS.
Pytasz "dlaczego"? Przeczytaj to wyżej co zaznaczyłem jako "ważne".
(jednak nie czytaj całych rozdziałów, tylko te kawałki które zaznaczyłem,
bo i tak doczytasz je później podczas uczenia się po kolei, rozdział po rozdziale)


P-118118
Czdum
Temat założony przez niniejszego użytkownika
» 2014-10-07 23:43:38
Dziękuje serdecznie użytkownikom za wsparcie i szybką odpowiedź.

Owszem miałem pewne podstawy na uczelni, aczkolwiek mocno okrojone, bez głębszego wytłumaczenia przez wykładowce, a tym bardziej zrozumienia przeze mnie i dlatego właśnie postanowiłem zajrzeć na ten kurs.

Jeszcze raz wielkie dzięki!
P-118126
« 1 »
  Strona 1 z 1