Switch od razu zamyka program [C++]

0

Dobry wieczór, przyznam się szczerze, że pierwszy raz spotykam się z czymś takim i nie potrafię nigdzie znaleźć odpowiedzi. Otóż korzystając z instrukcji switch, po wyborze opcji program od razu się zamyka

#include <iostream>
#include <string.h>

using namespace std;

int choice;
int quantity;
string sentence;

int main()
{
    
    
    cout<<"1.   Sentence backwards"<<endl;
    cout<<"2.   Alphabetical sort of words from the sentence"<<endl;
    cout<<"3.   Finish the program"<<endl;
    cout<<"Your choice: ";
    cin>>choice;
    
    switch (choice)
    {
        case 1:
        {
            cout<<"Enter the sentence you want to write backwards: "<<endl;
            getline(cin, sentence);
            quantity = sentence.length();
            
            for(int i=quantity-1; i>=0; i--)
            {
                cout<<sentence[i];
            }
            break;
        }
        case 2:
        {
            // nothing to do here yet 
        }
        case 3:
        {
            exit(0);
        }
    }
}

Bardzo prosiłbym o pomoc :)

2

Ale której opcji? W case 2 nie masz break, a case ma fallthrough więc wykonuje kod dalej, więc jak wybierasz 2 albo 3 to wykona się exit.
Poza tym cokolwiek nie zostanie wybrane z tego menu, program dojdzie do końca main i się zamknie. Nie bardzo rozumiem czego innego oczekujesz.

Opisz swój problem DOKŁADNIE, podając:

  • co robisz (wszystkie kroki, co wpisujesz i co naciskasz)
  • czego oczekujesz
  • co faktycznie się dzieje
2

pierwsze cin wczytuje int zostawiając pierszy znak końca linie w buforze.
Następne cin jest użyte z getline, więc czyta do momentu napotkania pierwszego znaku końca linii, które podałeś podczas wyboru opcji.

2

Najlepsze jest to, że dokładnie ten sam program działał jakiś czas temu, i normalnie oddawał odwrócone zdanie ¯_(ツ)_/¯ - mjk33 dziś, 02:54
Nie wydaje mi sie

1

Tak jak MarekR22 pisał, cin z 17 linijki zostawia znak końca linii w buforze, możesz naprawić to dodając po:

cin>>choice;

linijkę:

getchar();

Wtedy wybranie odwracanie ciągu znaków z opcji 1 działa, opcja 2, nic nie robi, a opcja 3 zamyka program.

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