[C++] Rozpoznawanie typu wpisywanych zmiennych

0

Witam wszystkich, mam pewien problem. Mianowicie mam do napisania programik, ktory bedzie pobieral z klawiatury liczby az do momentu, kiedy zostanie wpisany np jakis wyraz czy litera, jednak nie mam pojecia jak to zrobic. na razie mam cos takiego i nie wiem czy trzeba by do tego kodu cos dopisac czy calkiem go zmienic, aby uzyskac zamierzony efekt:

int main()
{
    double fLiczba;
    vector <double> liczby;
    for(;;)
    {
           cout << "Podaj liczbe: ";
           cin >> fLiczba;
           cout << endl;
           liczby.push_back(fLiczba);

    }
    getch();
    return 0;           
}

Wpisywane liczby sa zapamietywane w kontenerze gdyz po zakonczeniu pobierania tych liczb z klawiaruty program musi policzyc ich srednia arytmetyczna, z tym juz nie bede mial problemu, tylko jak zrobic, aby po wpisaniu nie liczby a np litery program wiedzial, ze ma zakonczyc petle?

0

Możesz jako warunek pętli wrzucić wczytywanie liczby

double liczba;
while(cin >> liczba)
cout <<"to jest liczba";

wtedy jeżeli to podana dana to jakas liczba to pętla się wykona.

0

Dzieki wielkie :) tak tez zrobilem, z tym ze cin >> liczba wpisalem jako warunek petli for, i wszystko dziala tak jak mialo byc :)

0

Akurat tutaj użycie while wydaje mi się bardziej naturalne po prostu.

0
don_daniel napisał(a)

Wpisywane liczby sa zapamietywane w kontenerze gdyz po zakonczeniu pobierania tych liczb z klawiaruty program musi policzyc ich srednia arytmetyczna

Tylko po co zapamiętywać te liczby?

0

Jakieś 10 dni temu w dziale Newbie pisałem jak wyliczyć średnią bez zapamiętywania wszystkich liczb. Starczy pamiętać średnią avg i ilość dotychczas wczytanych liczb count. Po wczytaniu kolejnej liczby wykonujemy kod

  count++;
  avg=(count*avg+nowa_liczba)/count;

Ze względu na wielokrotne dzielenie ten sposób jest zapewne mniej dokładny. Mam pytanie (do znawców metod numerycznych), czy na pewno jet mniej dokładny, o ile mniej?

0

Dodam, że wiem iż można w pętli tylko sumować, a dzielić raz na końcu.

0

ja dopiero ucze sie c++ wiec moge o czyms nie wiedziec :) mam cos takiego i wydaje mi sie ze jest to wystarczajace rozwiazanie mojego problemu:

int main()
{
    double fLiczba, fSuma = 0, fSrednia = 0;
    vector <double> liczby;
    cout << "Podaj liczbe: " << endl;
    for (;cin >> fLiczba;)
    {
        cout << "Podaj liczbe: ";
        cout << endl;
        liczby.push_back(fLiczba);
    }
    for (int i=0; i < liczby.size() ; ++i)
    {
        fSuma += liczby[i];
    }
    fSrednia = fSuma/static_cast<double>(liczby.size());
    cout << "Srednia arytmetyczna podanych liczb wynosi: " << fSrednia << endl; 
    getch();
    return 0;           
}

ale byc moze sie myle, wiec jesli ktos ma jakies uwagi co do tego kodu to chetnie przeczytam :)

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