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

pomoc z zabezpieczeniem przed wpisaniem literki

Ostatnio zmodyfikowano 2011-04-30 14:08
Autor Wiadomość
capajera18
Temat założony przez niniejszego użytkownika
pomoc z zabezpieczeniem przed wpisaniem literki
» 2011-04-28 18:47:55
Cześć wszystkim
Mam problem taki że nie wiem gdzie umieścić ten że kod podany KILKA DNI TEMU przez pana Elano92
C/C++
if( spr == false )
do
{
    cout << "Prosilem o podanie liczby : ";
    cin.clear();
    cin.sync();
    cin >> liczba;
    spr = cin.good();
} while( !spr );

cout << "podales liczbe" << liczba;

mianowicie nie wiem gdzie go dokładnie umieścić(czy może nie rozumiem) w moim programie
C/C++
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int liczba;
    do
    {
       
        cout << "Podaj liczbe ";
        cin >> liczba;
        bool sprawdz = cin.good();
        cout << "\nPodales liczbe " << liczba << endl;
       
        if( sprawdz == false )
        do
        {
            cout << "\nLiczbe , nie literke " << endl;
            cin >> liczba;
            cin.sync();
            cin.clear();
            sprawdz = cin.good();
           
        } while( !sprawdz );
       
    } while( 1 );
   
    getch();
    return 0;
}

Mniej wiecej rozumiem ten kodzik przedstawioy przez Pana Elano92
(Oznacza on: 1 Zadeklarował zmienną bool nazywajac ją spr i dał jej wartość cin.good();
2 dalej założył warunek if() ze jeżeli spr jest równe false to wykonaj kod poniżej czyli petle do...while
W petli prosi o podanie liczby jak wiadomo, ustawia zawartość czyszczenia strumienia wejściowego czyli czyści flagi błedu oraz bufor strumienia dalej przypisuje ponownie dla nazwy spr wartosc cin.good();
i konczy petle while negacją spr czyli true(chyba, moge sie mylić :))

I teraz mam problem bo nie rozumiem dokładnie gdzie zamieścić kod podany PRZEZ Pana Elano92 któremu estem wdzieczny za poświecony mi czas na odp.

Czy mogłby ktos mi powiezdziec dlaczego moj zapis jest błędny ?? Bo wariuje ten program i przy okazji ja też .

napisałem już jeden kalkulator i zabezpieczyłem go w taki sposób tylko że chyba przypadkiem jest zabezpieczony ale nie rozumiem dokładnie gdzie go zamieścić prosze o pomoc.
P-32177
dmx81
» 2011-04-28 18:55:05

i konczy petle while negacją spr czyli true(chyba, moge sie mylić :))

nie konczy petli while.

do{...}while(!warunek) //

oznacza, rob, to co miedzy nawiasami, dopoki prawda jest to, co jest w nawiasie przy while
a nawias przy while mowi - prawda jest to, ze warunek == false (negacja "istnienia" warunek). Dopoki warunek == false, tak dlugo bedzie powtarzana petla do{}while

jesli znasz wskazniki, to
C/C++
char * wskaznik = NULL;
if( !wskaznik )
     return true;


wskaznik na zmienna typu char na wartosc NULL, a wiec nawias przy if bedzie prawda
P-32178
capajera18
Temat założony przez niniejszego użytkownika
» 2011-04-28 19:00:59
aha czyli gdzie mam dokładnie umieścić ten pierwszy kod w moim programie ??
nie nie znam jeszcze wskazników ale chetnie poznam jak dobrze opanuje lekcje z petlą WHILE

P-32181
SeaMonster131
» 2011-04-28 19:43:21
jesli znasz wskazniki, to ...
No nie przesadzaj, on nie zna jeszcze podstaw a Ty mu ze wskaźnikami wyjeżdżasz? To jest oczywiste że ich nie zna ekhem... :p

aha czyli gdzie mam dokładnie umieścić ten pierwszy kod w moim programie ??
Pokombinuj troche :) Wiele razy kombinowanie spotka Cie jeszcze w przyszłości :)
P-32194
capajera18
Temat założony przez niniejszego użytkownika
» 2011-04-28 19:46:46
kurcze kombinowalem w swoim kalkulatorze :) i jakoś wyszło , kalkulator ten mam na kompie u siebie w domu a u brata właśnie jestem daleko od domu :)

Więc zalezy mi naprawde by zrozumieć gdzie umieścić ten kod i dlaczego w tym a nie iinym miejscu :)
P-32195
capajera18
Temat założony przez niniejszego użytkownika
» 2011-04-28 19:55:22
żeeeeeeeeee cooo ???
Przestawienie w inne miejsce flag pomogło o kurcze ale świry :)

C/C++
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int liczba;
    do
    {
       
        cout << "Podaj liczbe ";
        cin >> liczba;
       
        bool sprawdz = cin.good();
        if( sprawdz == false )
        do
        {
            cout << "\nLiczbe, nie literke " << endl;
            cin >> liczba;
            sprawdz = cin.good();
            cin.clear();
            cin.sync();
           
        } while( !sprawdz );
       
        cout << "Liczba 0 konczy program " << endl;
        cout << "\nPodales liczbe " << liczba << endl;
    } while( liczba != 0 );
   
    getch();
    return 0;
}


ALE SWIRY :) UDAŁO SIĘ :)




Ale dlaczego akurat to ???
A nie jak poprzednio przy opisie problem kiedy podalem kod mojego programu ?

Czy może ktoś mi to wytłumaczyć ?
Prosze Prosze Prosze
P-32196
capajera18
Temat założony przez niniejszego użytkownika
» 2011-04-29 09:39:14
dobra już wiem dlaczego :)
Poprostu pomyliłem zapis

C/C++
cin.clear();
cin.sync();

z takim
C/C++
cin.sync();
cin.clear();

Ale dlaczego kolejność w tym jest taka ważna ?
Ten poniższy zapis powodował że mój program wariował przy wpisaniu literki.
P-32219
DejaVu
» 2011-04-29 15:49:30
No bo nie chciał się wykonać sync w momencie gdy była ustawiona flaga błędu.
P-32225
« 1 » 2
  Strona 1 z 2 Następna strona