Getchar() pobiera za dużo danych

0

Mam problem, piszę prosty program który ma za zadanie pobierać od użytkownika liczby do momentu gdy ten poda w końcu kropkę.
Następnie spośród podanych liczb mają zostać wypisane te które są większe od 7.

Problem polega na tym że za każdym razem gdy wypisywane są liczby większe od 7 poprzedzone są kropką, nie wiem w jaki inny sposób mógłbym zatrzymać tą pętlę ani w jaki sposób dodać warunek tak by kropka NIE DODAWAŁA się do vectora.

Jakieś pomysły ?

#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <stdio.h> // dla getchar(); 

using namespace std; 

bool czyWieksza(int n) 
{
   return n>3; 
} 

int main(void) 
{
   vector<int> vs; 
   int n, c; 
   
   cout << "Podaj liczby prosze: "; 

   do {
      cout << "podaj liczbe: "; 
      cin >> n; 
      vs.push_back(n); 
      c=getchar(); 
      putchar(c); 
      } while(c != '.'); 

   vector<int>::iterator ek = find_if(vs.begin(), vs.end(), czyWieksza); 

   while(ek!=vs.end())
   {
      cout << *ek << " "; 
      ek = find_if(ek+1, vs.end(), czyWieksza); 
   } 

} 
 
0

Mieszasz dwie techniki czytania danych wejściowych i się dziwisz?
Użyj cin.get() zamiast getchar()

0

@_13th_Dragon, ale to nie spełni założenia z zadania. Jak niby wtedy ma skończyć pobieranie danych wejściowych po tym jak użytkownik wpisze kropkę?

Wiem, że istnieje kilka sposobów na uporanie się z tym, ale chcę po prostu się dowiedzieć co musze zmodyfikowac w tym kodzie, tak by ta pętla do, while zatrzymała się po podaniu kropki i tak by ta kropka nie dodała się do vectora który przyjmuje tylko inty.

0

No mówię że nie wiem co mi ten cin.get da, czytam dokumentację i w ogóle nie podchodzi pod moje rozwiązanie.
Pętla ma działać bez wcześniejszego podawania ile liczb użytkownik poda, po prostu ma się zatrzymać gdy wciśnie kropkę zamiast jakiegoś inta...

I nie wiem, w jaki sposób miałbym niby wykorzystać cin.get w moim przykładzie.

2
while(true)
  {
   cout << "podaj liczbe: "; 
   if(cin>>n) vs.push_back(n);
   else
     {
      cin.clear();
      if(cin.get()=='.') break;
      cout<<"ma byc liczba"<<endl<<endl;
     }
  }

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