program znika zaraz po wykonaniu

program znika zaraz po wykonaniu
AZ
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:42
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

Kopiuj
 // 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;
}
edytowany 1x, ostatnio: Azreal
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 5 godzin
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

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

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


edytowany 2x, ostatnio: several
AZ
cin.sync () zatrzymuje okno jeśli po znaku '#' mam 1 znak, a jeśli dalej mam kolejne słowa to program potrzebuje więcej linii cin.sync() ale ich ilość nie jest znana w momencie komplikacji. Użycie string ma sens tylko, że to jest suchy przykład z podręcznika nie bazujący na stingu. nie mniej dzięki za pomoc
kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:7 dni
  • Lokalizacja:Łódź
  • Postów:1402
1

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


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
AZ
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:42
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ą

Kopiuj
 / 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;
}
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 5 godzin
2

Maina zakończ w ten sposób

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

AZ
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:42
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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.