Pominięty input cin.

0

Witam!
Mam problem z programem, który w jego końcowej części pomija komendę std::cin i przechodzi dalej. Nie potrafię do końca określić dlaczego tak się dzieje. Doszedłem do wniosku, że ma to coś wspólnego z fragmentem wpisywania danych do wektora, ale nie widzę większego związku. :/ Tak wygląda przykładowy output:

Enter any positive number. Enter any other sign if you'd like to stop: 1
Enter any positive number. Enter any other sign if you'd like to stop: 2
Enter any positive number. Enter any other sign if you'd like to stop: 3
Enter any positive number. Enter any other sign if you'd like to stop: !

Prime numbers of these you entered are following:

2
3

Enter a number of primes you'd like to sum:
C:\Users\admin\source\repos\Debug\ConsoleApplication3.exe (proces 9544) zakończył działanie.
#include "pch.h"
#include <iostream>
#include <vector>

std::vector <int> Primes(std::vector<int> numbers)
{
    std::vector<int> prime_num;
    int counter;

    for (int n = 0; n < numbers.size(); n++)
    {
        counter = 0;
        for (int i = 1; i <= numbers[n]; i++)
        {
            if (numbers[n] % i == 0)
                counter++;
            else;
        }
        if (counter == 2)
            prime_num.push_back(numbers[n]);
    }

    return prime_num;
}

int main()
{
    try
    {
        std::vector<int> numbers;
        int number;
        int sum_number;
        std::cout << "Enter any positive number. Enter any other sign if you'd like to stop: ";
        while (std::cin >> number)
        {
            std::cout << "Enter any positive number. Enter any other sign if you'd like to stop: ";
            if (number < 0)
                throw number;
            numbers.push_back(number);
        }

        std::vector<int> prime_num = Primes(numbers);
        std::cout << "\nPrime numbers of these you entered are following: \n\n";

        for (int a = 0; a < prime_num.size(); a++)
        {
            std::cout << prime_num[a] << std::endl;
        }

        std::cin >> sum_number;

    }

    catch(int x)
    {
        std::cout << "\nAn error has occured. Error code: " << x << std::endl;
    }

Z góry dziękuję. ;)

0

Przejedź to debugerem, albo Wstaw jakieś "printy", Będziesz Wiedział do którego momentu program dochodzi.

0

Program nie odczytuje żadnych cin'ów od tego momentu.

while (std::cin >> number)
        {
            std::cout << "Enter any positive number. Enter any other sign if you'd like to stop: ";
            if (number < 0)
                throw number;
            numbers.push_back(number);
        }
0

Program Ci omija std::cin, bo ustawiłeś warunek pętli na wprowadzenie nieprawidłowego znaku, a później nie czyścisz bufora strumienia wejściowego.

0

Dzięki wielkie! :D
Połączenie cin.clear i cin.ignore zadziałało.

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