program znika zaraz po wykonaniu

0

Witam, mam prosty kod wczytujący ciąg znaków do momentu natrafienia na symbol '#'. Kod dział, ale okno zamyka się zaraz po wykonaniu programy. zwykle aby tego uniknąć stosuje cin.get(); tym razem jednak pętla sprawdza kolejne wczytywanie znali i jeden cin.get(); nie wystarcza (ich ilość jest zależna od użytkownika wiec nie mogę zdefiniować pętli która by generowała odpowiednia ilość cin.get(); ) wrzucenie cin.get(); do pętli sprawdzającej skutkuje utrata co .drugiego znaku. Jakieś rady jak to ominąć ? (Kod z podręcznika S Praty). Próbowałem również cin.clear(); oraz cin.ignore(); efekt ten sam

 // textin2.cpp -- wczytywanie znakow  w petli while 
#include<iostream>
int main()
{
	using namespace std;
	char ch;		// zmienna literowa
	int count = 0;		// licznik wprowadzanych znakow

	cout << "Podaj tekst do wprowadzenia; # konczy ciag znakow." << endl;
	cin.get(ch);
	
	while (ch != '#')
	{
		
		cout <<ch;		//wyswietl znak
		++count;		//dolicz znak
		cin.get(ch);	//pobierz nastepny znak
		
	}
	cout << "\nWprowadziles " << count << " znakow" << endl;
	cin.get();
	return 0;
}
1

Twoje pytanie w treści posta odbiega od problemu w tytule tematu. Co próbujesz osiągnąć? Co chcesz omijać? Jeśli chcesz wczytać wiele znaków na raz użyj std::getline

std::string input;
std::getline(std::cin, input);

Jeśli chodzi o nie zatrzymywanie okna to prawdopodobnie brakuje Ci cin.sync().

1

Bo program ma jeszcze w pamięci niepobrany znak końca linii, więc się nie zatrzymuje na ostatnim cin.get();

0

Program ma przyjmować ciąg dowolnych znaków i podliczyć ile znaków występuje do znaku '#'.
Chce mieć możliwość przeczytania wyniku działa programu.
Próbuje ominąć znaki końca linii.
Wstawiłem nawet pętle opóźniająca ale nie mam możliwości podania ilość sekund do odliczenia, bo program "leci" dalej.

tu kod z dodatkową pętlą odliczającą

 / textin2.cpp -- wczytywanie znakow  w petli while 
#include<iostream>
#include <ctime>	//zawiera deklarcje funkcji clock() i typu clock_t
int main()
{
	using namespace std;
	char ch;        // zmienna literowa
	int count = 0;      // licznik wprowadzanych znakow

	cout << "Podaj tekst do wprowadzenia; # konczy ciag znakow." << endl;
	cin.get(ch);

	while (ch != '#')
	{

		cout << ch;      //wyswietl znak
		++count;        //dolicz znak
		cin.get(ch);    //pobierz nastepny znak

	}
	cout << "\nWprowadziles " << count << " znakow" << endl;
	cin.get();

	cout << "Podaj czas opoznienia w sekundach: ";
	float secs;
	cin >> secs;
	clock_t delay = secs * CLOCKS_PER_SEC;  //	konwersja na jednostyki systemowe
	cout << "\nZaczynamy\a\n";
	clock_t start = clock();
	while (clock() - start < delay)
		;
	cout << "gotowe \a\n";
	return 0;
}
2

Maina zakończ w ten sposób

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
0

problem rozwiązuje również ustawienie w pętli opóźniającej na sztywno czasu do odliczenia
float secs=5;

niemniej rozwiązanie przedmówcy jest bardziej profesjonalne:

several napisał(a):

Maina zakończ w ten sposób

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();

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