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