Problem przy zrobieniu idiotoodproności.

0

Witam.
Jest to kawałek mojego programu dot wczytywania liczb co zresztą widać. Nie mogę sobie jednak poradzić przy zrobieniu idiotooporności.

 for(i = 0; i < N; ++i)
    {
        do
        {
        printf("\nPodaj czesc rzeczywista liczby numer %d\n", i);
        }
        while((scanf("%lf", &liczbaI[i]->re)) != 1);

        do
        {
        printf("\nPodaj czesc urojona liczby numer %d\n", i);
        }
        while((scanf("%lf", &liczbaI[i]->im)) != 1);
    }

Byłbym wdzięczny za jakieś sugestie.

0

Tzn.? Co ma być idiotoodporne? Określ dokładniej o co ci chodzi.

0

Dzięki za opdowiedź. Chodzi mi o ustrzeżenie programu przed wczytywaniem liter i znakow nie będących liczbami.

Zmodyfikowałem do następującej postaci:

 for(i = 0; i < N; ++i)
    {
        printf("\nPodaj czesc rzeczywista liczby numer %d\n", i);
        while((scanf("%lf", &liczbaI[i]->re)) != 1)
        {
        _flushall();
        printf("\nPodales zla dana, podaj poprawna czesc rzeczywista liczby numer %d\n", i);
        }

        printf("\nPodaj czesc urojona liczby numer %d\n", i);
        while((scanf("%lf", &liczbaI[i]->im)) != 1)
        {
        _flushall();
        printf("\nPodales zla dana, podaj poprawna czesc urojona liczby numer %d\n", i);
        }
    }

Który już ładnie nie pozwala wczytywać liter. Jednak mam jeszcze wątpliość, ponieważ jak np. zapodam mu 543sad to wczytują liczbę do while, a kolejne literki sprawdza w kolejnym warunku. Nie da się temu jakoś zaradzić?

Domyślam się, że tu powinna być odpowiedź jednak nie do końca śmiga ten kawałek kodu z podpowiedzi Shaloma

int zmienna;
while(scanf("%d", &zmienna) != 1) //dopóki nie uda się wczytać
  {
    //ew. komunikat błędu
    while(char c=getchar() != '\n' && c!=EOF); //pętla wyciągająca znaki z bufora
  }
0

no tak ponieważ tam jest dla int'a, podobnie isdigit.

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