• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak przerwać pętle „while (cin>>liczba)”?

Object Storage Arubacloud
0 głosów
4,190 wizyt
pytanie zadane 3 lipca 2016 w C i C++ przez gq818 Nowicjusz (120 p.)

Witam! Czy istnieje możliwość przerwania pętli typu „while (cin>>liczba)” po wciśnięciu klawisza enter?

#include <iostream>

using namespace std;

int main()
{
    int liczba;
    int suma=0;
    int licznik=0;

    while (cin>>liczba)
    {
        //wczytuje jakiś zbiór liczb, np. 1 2 3 4 5
        licznik++;
        suma += liczba;
    }
    
    //pętla zostaje przerwana klawiszem enter i na końcu wyświetla średnią
    cout<<"Srednia: "<<suma/licznik<<endl;

    return 0;
}

 

4 odpowiedzi

+2 głosów
odpowiedź 3 lipca 2016 przez Szahid Pasjonat (20,930 p.)
edycja 3 lipca 2016 przez Szahid
Nie zrobisz tego z obiektem cin ponieważ on ignoruje spacje i enter. Możesz jednak w warunku pętli zamiast obiektu cin dać funkcje getchar (). Następnie za pomocą ifa sprawdzasz czy został wprowadzony enter ( jeśli tak to przerywasz breakiem ) a jeśli nie został to konwertujsz podany znak na liczbę. Tutaj zamieszczam Ci link jak zrobić taką konwersje http://forum.pasja-informatyki.pl/6868/zamiana-string-char-na-int Ten sposób zadziała. Jednak jak będziesz miał jakieś problemy przy implementacji to pisz w komentarzu. Pimoge
komentarz 3 lipca 2016 przez Szahid Pasjonat (20,930 p.)
Za co downvote?
0 głosów
odpowiedź 3 lipca 2016 przez Avernis Nałogowiec (27,400 p.)
if(getchar() == 13)
{
    break;
}

 

komentarz 3 lipca 2016 przez gq818 Nowicjusz (120 p.)
Nie działa.
komentarz 3 lipca 2016 przez Avernis Nałogowiec (27,400 p.)

co dokładnie nie działa? Możesz też spróbować tego:

char enter = getchar();
if(enter == 13)
{
    break;
}

Nie pamiętam czy 13 to było enter. spróbuj dać zamiast 13: 'w' i wtedy przerwie po naciśnięciu w

komentarz 3 lipca 2016 przez gq818 Nowicjusz (120 p.)
Nie wiem. Pętla się nie przerywa i wykonuje się dalej tak jakby nie było tej instrukcji.
komentarz 3 lipca 2016 przez Avernis Nałogowiec (27,400 p.)
tak to powinno wyglądać:

#include <iostream>

using namespace std;

int main()
{
	int liczba;
	int suma = 0;
	int licznik = 0;

	while (cin >> liczba)
	{
		if (getchar() == 'w')
		{
			break;
		}
		licznik++;
		suma += liczba;
	}

	//pętla zostaje przerwana klawiszem enter i na końcu wyświetla średnią
	cout << "Srednia: " << suma / licznik << endl;

	return 0;
}

 

komentarz 3 lipca 2016 przez zperkowski Stary wyjadacz (11,150 p.)
edycja 3 lipca 2016 przez zperkowski

Jeżeli wpisana liczba ma być akceptowana za pomocą klawisza Enter, a pętla ma być przerywana za pomocą klawisza Enter, to przy działającym kodzie pętla się skończy przy pierwszym obiegu. Co prawda C++ zareaguje trochę inaczej, jednak logika podpowiada, że należy użyć tu klawisza Esc lub czegoś innego. Rozwiązanie kolegi Avernis działa.

#include <iostream>

using namespace std;

int main() {
    int liczba;
    int suma = 0;
    int licznik = 0;

    while (cin >> liczba) {
        if (getchar() == 'w') {
            break;
        }
        licznik++;
        suma += liczba;
    }
    cout << "Srednia: " << suma / licznik << endl;

    return 0;
}

 

komentarz 3 lipca 2016 przez Avernis Nałogowiec (27,400 p.)

można też ustawić np tak:

if(liczba == 0)
{
    break;
}

 

komentarz 3 lipca 2016 przez gq818 Nowicjusz (120 p.)
To chyba nie jest dobry sposób.
0 głosów
odpowiedź 3 lipca 2016 przez DawidRodycz Gaduła (3,090 p.)
#include <conio.h>

if(getch() == char(13))
        break;

Jak wam powyższe opcje mogą działać skoro nawet biblioteki nie dołączyliście.
spróbuj z powyższym przykładem.

 

komentarz 3 lipca 2016 przez Szahid Pasjonat (20,930 p.)
Od kiedy do getchar jest potrzebna biblioteka. Wystarczy standardowa
komentarz 3 lipca 2016 przez DawidRodycz Gaduła (3,090 p.)
Mój kompilator twierdzi że nie.
–2 głosów
odpowiedź 3 lipca 2016 przez MetGang Nałogowiec (34,360 p.)
3 odpowiedzi i wszystkie błędne na ten sam temat? No cóż.

Do przerwania strumienia wejścia (w tym wypadku std::cin) używaj Ctrl+Z i wtedy enter.
komentarz 3 lipca 2016 przez Szahid Pasjonat (20,930 p.)
Twoja również ponieważ pytanie było jak zakończyć wprowadzanie enterem a nie przy użyciu znaku EOF do którego podałeś kombinacje klawiszy. Ponad to podana przez ciebie kombinacja jest pod Windowsa a nie było pisane pod jaki system jest program I proszę cię żebyś wskazał błąd w mojej odpowiedzi bo go nie widzę o chętnie się czegoś naucze EDIT EOF zadziała tak samo jak wpisanie danych nie liczbowych a taka propozycja padła pierwsza
komentarz 3 lipca 2016 przez DawidRodycz Gaduła (3,090 p.)
Dokładnie a przerwanie pętli spowoduje po prostu wpisanie jakiegokolwiek znaku z klawiatury do zmiennej typu int. A nie o to chodziło.

Podobne pytania

0 głosów
1 odpowiedź 480 wizyt
0 głosów
1 odpowiedź 307 wizyt

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...