Zabezpieczenie programu przed wpisywanie liter zamiast liczb

0

Witam serdecznie
Napisałem program do obliczania miejsc zerowych funkcji kwadratowych, lecz nie mogę poradzić sobie z zabezpieczeniem go przed wpisywaniem liter do zmiennych.
Udało mi się tylko w przypadku gdy wpisuje jedną literę, natomiast przy wpisaniu np "2dq4sd' wprowadza pierwszą cyfrę do zmiennej. Co powinienem z tym zrobić?
Tak to wygląda:

double a, b, c;
double bad;
while (bad != 1)
{
    printf("Podaj a:");
    bad = scanf("%lf", &a);
    getchar();
}
0

Generalnie to musisz trochę zmienić sposób wczytywania.
Scanf zrobi tak jak w Twoim przypadku - wyłuska sobie wszystko do pierwszego znaku niebędącego cyfrą i to umieści w zmiennej a. Stąd wspomniana dwójka.

Wczytuj ciąg znaków i użyj odpowiedniej funkcji:

char * fgets ( char * str, int num, FILE * stream ); // do wczytania ciągu znaków
double strtod (const char* str, char** endptr); // do zamiany na double

http://www.cplusplus.com/reference/cstdio/fgets/
http://www.cplusplus.com/reference/cstdlib/strtod/

0

Ogólnie:

double a, b, c;
double bad;

funkcja To_nie-liczba()
{ //tu wykonujesz jakąś operację typową dla liczby za pomocą try. W przypadku przechwycenia błędu systemowego będziesz wiedział, że to nie liczba i poprosisz usera o wpisanie nowej za pomocą np: skoku Label1.
}

    Label1:
    bad = scanf("%lf", &a);


    if bad == To_nie_liczba goto Label1;   
    getchar();


}

1 użytkowników online, w tym zalogowanych: 0, gości: 1