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

Zapętlenie totalne

Object Storage Arubacloud
0 głosów
1,079 wizyt
pytanie zadane 2 maja 2015 w C i C++ przez aksameet Nowicjusz (240 p.)

Witam,

kombinuje jakby tu zapętlić program tak, aby wychodził z pętli tylko gdy mu pozwolę.

Chodzi o to, żeby po każdym wykonaniu odwrócenia wyrazu program pytał użytkownika czy chce kontynuować z kolejnym słowem...

Wymodziłem taki kod:

​
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>

using namespace std;
char wybor;

int main()
{
    for (;;)
    {
        string wyraz;
        cout << "Podaj wyraz do odwrocenia: ";
        cin>>wyraz;

        int dlugosc=wyraz.length();

        for (int i=dlugosc-1; i>=0; i--)
        {
            cout<<wyraz[i];
        }
        getchar();getchar();
        system("cls");

        cout<<"Dalej? t/n"<<endl;
        wybor=getch();

            switch(wybor)
            {
            case 't':
                for (;;)
                    {

                    cout << "Podaj wyraz do odwrocenia: ";
                    cin>>wyraz;

                    for (int i=dlugosc-1; i>=0; i--)
                    {
                        cout<<wyraz[i];
                    }
                    getchar();getchar();
                    system("cls");

                    cout<<"Dalej? t/n";
                    wybor=getch();

                    getchar();getchar();
                    system("cls");
                    }
            case 'n':
                exit(0);
        getchar();getchar();
        system("cls");
            }
        return 0;
    }
getchar();getchar();
system("cls");
return 0;
}

 

..ale niestety nie działa jak powinien. Pierwsze powtórzenie jest ok, wybór 't': pyta o kolejne słowo, a 'n' kończy program. Ale kolejne nie przyjmują wyboru 'n'.. Jakby to napisać?

4 odpowiedzi

+1 głos
odpowiedź 2 maja 2015 przez niezalogowany
Najlepiej zapętlić przy pomocy while lub do while

użycie for(;;) chyba nie jest dobrym rozwiązaniem

Jak kolega Tisamon słusznie zauważył zmianę kolejności dać w osobną funkcję.
0 głosów
odpowiedź 2 maja 2015 przez Tisamon Bywalec (2,090 p.)
Najlepiej całe to odwracanie wyrazu dać w osobną funkcję, a potem w mainie zrobić pętlę która się będzie pytała czy jeszcze raz. Jeśli tak, to wywołujesz tę funkcję, która odwraca litery, jeśli nie, to exit(0).
komentarz 3 maja 2015 przez aksameet Nowicjusz (240 p.)
Moge prosic o przykład?
0 głosów
odpowiedź 3 maja 2015 przez sprtnbst Obywatel (1,710 p.)

Jeżeli chcesz koniecznie skorzystać z pętli to umieść program w pętli while. Jako warunek możesz podać zmienną o nazwie np. koniec oraz wartości 0. I pętla wykona się dla tej wartości. Gdy pod koniec program zapyta użytkownika, czy chce zakończyć, on potwierdzi, wystarczy, że zmienisz wartość zmiennej koniec na 1 i pętla się nie wykona, program przejdzie do ostatniej instrukcji jaką będzie return 0;.

komentarz 3 maja 2015 przez aksameet Nowicjusz (240 p.)
Mogę prosić o przykład?
komentarz 3 maja 2015 przez sprtnbst Obywatel (1,710 p.)
Oczywiście, ale jak będę mieć dostęp do komputera. Komentarze w wersji mobilnej mają wiele problemów i niestety nie mogłem wysłać w całości rozwiązania które podałem
komentarz 4 maja 2015 przez sprtnbst Obywatel (1,710 p.)

Przepraszam, że długo zeszło, oto obiecana odpowiedź

 

Po przemyśleniu sprawy doszedłem do wniosku, że zrobiłbym to jeszcze prościej. Wszystko umieściłbym w pętli while(true), czyli tzw. pętla nieskończona, której warunek zawsze jest spełniony. Wyjdziemy z niej przy użyciu instrukcji break. Więcej o niej: http://en.cppreference.com/w/cpp/language/break

Przykład:

//(...)

while(true){

// tutaj instrukcje...

cout << "Czy chcesz zakonczyc program? t/n" << endl;
string koniec;
cin >> koniec;
if(koniec == 't') { break; }

} //ta klamra zamyka petle while

 

0 głosów
odpowiedź 3 maja 2015 przez 1110200039910 Gaduła (4,630 p.)
​while(1)
{
(...)
if(n==1) goto aaa;
}
aaa:

 

Ja bym zrobił coś takiego, tzn po skończonej pętli program zapyta Cię czy kontynuować, zależnie od Twojej odpowiedzi opuści pętle lub będzie ją kontynuować. Mimo niesławy 'goto' przydaje się do opuszczania pętli. 

komentarz 4 maja 2015 przez sprtnbst Obywatel (1,710 p.)
Nie powinien uczyć się używania goto, prowadzi to do bardzo złych praktyk.
komentarz 5 maja 2015 przez 1110200039910 Gaduła (4,630 p.)

goto jest idealne do opuszczania wielu petli, jednak nie warto tego robic przy pojedynczej.

Podobne pytania

0 głosów
1 odpowiedź 1,624 wizyt
pytanie zadane 6 września 2019 w C i C++ przez milaa Nowicjusz (170 p.)
0 głosów
1 odpowiedź 369 wizyt
pytanie zadane 22 lipca 2019 w C i C++ przez Autobot99a Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,541 wizyt

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 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!

...