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

jak wypisać ze jest błąd ? c++

Object Storage Arubacloud
0 głosów
517 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez veryhotshark Obywatel (1,620 p.)

witam mianowicie chodzi o to ze program się pyta ile ocen policzyć do średniej i ja chciałbym żeby wypisał błąd i poprosił o ponowne wprowdzenie liczby , działa on tylko gdy pisze jakies znaki ale chciałbym żeby wypisywał błąd gdy wpisze liczbe z przecinkiem np. 2,5 a jak tak pisze to program bierze to że chce 2 oceny wprowadzic z czego 5 jest pierwszą oceną

#include <iostream>
#include <cstdlib>

using namespace std;

long int ile;

float suma=0, srednia;

int main()
{
    cout << "ile ocen policzyc do sredniej?: ";
    if(!(cin>>ile))
    {
       cerr<<"Prosze podac liczbe calkowita :";
       exit(0);
    }

   float tablica[ile];
   for (int i=0; i<ile;i++)
   {

      cout<<"Podaj "<<i+1<<" ocene: ";
      cin>>tablica[i];
      while((tablica[i]>6)||(tablica[i]==0))
                    {
                    cout << " blad, podaj "<<i+1<<" ocene zeby dodac do sumy:" ;
                    cin>>tablica[i];
                    }
      suma+=tablica[i];
   }
   srednia = suma/ile;
   cout<<"srednia rowna sie = "<<srednia;

    return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 8 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)

Niestety, ale w takim przypadku sam musisz napisać mechanizm odpowiedzialny za wykrywanie błędu - std::cin zwraca do zmiennej wartość, która jest poprawna, pozostawiając resztę danych, czyli np. litery.

0 głosów
odpowiedź 8 lutego 2016 przez Sedi Stary wyjadacz (10,200 p.)
if(!(cin>>ile))
    {
       cerr<<"Prosze podac liczbe calkowita :";
       exit(0);
    }

Musisz wiedzieć, że if to instrukcja warunkowa, która się nie powtarza. Do powtarzalności służy np. pętla while.

Krótka instrukcja co powinieneś zrobić, by mieć powtarzalność:

  1. Zamiast if-a wstaw while
  2. Wywal exit(0). Swoją drogą, to nie używaj exit(0), tylko exit(1). 0 jest przyjęte dla poprawnie wykonanego kodu
  3. W pętli while dodaj std::cin.clear();<- Najkrócej mówiąc zamienia "złe" bity na dobre (nie bijcie za to uproszczenie. Dla ciekawskich zamienia: std::cin.rdstate() na std::ios_base::goodbit)
  4. A dla pewności std::cin.sync(); <- Czyści z niepotrzebnych znaków

A co do wprowadzania liczb zmiennoprzecinkowych, to musisz wiedzieć, że gdy wprowadzisz do inta np. 2.5, to i tak zrobi się z tego 2, więc nie ma sensu się tym bawić :)

Pozdrawiam :)

0 głosów
odpowiedź 8 lutego 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Podobne pytania

0 głosów
1 odpowiedź 164 wizyt
0 głosów
0 odpowiedzi 549 wizyt
0 głosów
3 odpowiedzi 357 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...