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

Pętla sprawdzająca czy podana wartość jest poprawna

Cloud VPS
0 głosów
603 wizyt
pytanie zadane 25 grudnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)

Witam, 

Jeśli użytkownik wpisze na wejściu wartość inną niż liczba, program powinien poprosić o podanie wartości jeszcze raz, tak długo do póki wartość nie będzie poprawna. Chce również aby dane które były wpisane do tablicy wcześniej, nie zostały utracona. Cały dotychczasowy kod jest zamknięty w pętli for.  Jak mogła by wyglądać kolejna  pętla, która obsługiwałaby warunek sprawdzania poprawności danych? 

float fsen(float* tsen, int days, string*dayinfo)
{
   float average=0,suma=0;
    for( i=0; i<days; i++)
   {
       cout<<"How many hours  do you sleep at "<<dayifno[i]<<" : ";
       cin>>tsen[i];
      //tutaj chciałbym wpisać pętle sprawdzająca warunek. 

        suma+=tsen[i];
    }
        [...]
        [...]
        [...]
        [...]
   
        return [...];
 
}

 

2 odpowiedzi

0 głosów
odpowiedź 25 grudnia 2019 przez mrspock1 Mądrala (6,420 p.)
Co to za dziwna koncepcja. Tak było dawniej. W systemie windows tak się nie pisze. Wywołujesz procedurę po kliknięciu w button. Procedura na początku sprawdza czy dane są poprawne i jeśli nie, to wywołuje komunikat o wyjątku w bloku try except end. Wyjątek kończy procedurę i zwraca sterowanie do systemu operacyjnego. Użytkownik gdy ma powtórzyć czynność wprowadzania danych ponownie zatwierdza je kliknięciem w button. Można zrobić zmienną globalną która będzie liczyć te próby i ograniczać liczbę powtórzeń.
0 głosów
odpowiedź 25 grudnia 2019 przez niezalogowany
edycja 25 grudnia 2019

może zadziała

while(!(std::cin>>tsen[i])){ //edit2::mała korekta
        cin.clear();
        string temp;
        getline(cin,temp);
    }
    if(cin.peek()!='\n'){
        string temp;
        getline(cin,temp);
    }

edit::  i  https://en.cppreference.com/w/cpp/regex/regex_match

edit tj. const std::regex txt_regex("^[0-9 \\.]{0,15}$");

https://www.youtube.com/watch?v=8tQhfhguwyQ

Podobne pytania

0 głosów
3 odpowiedzi 591 wizyt
pytanie zadane 29 listopada 2015 w C i C++ przez Kasztan Dyskutant (8,080 p.)
0 głosów
3 odpowiedzi 252 wizyt
pytanie zadane 27 listopada 2015 w C i C++ przez thekibi27 Bywalec (2,110 p.)
0 głosów
6 odpowiedzi 479 wizyt
pytanie zadane 21 października 2015 w C i C++ przez pingwin1993 Użytkownik (600 p.)

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,908 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

Kursy INF.02 i INF.03
...