Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Instrukcja switch nie działa

Ostatnio zmodyfikowano 2017-03-30 19:42
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
Instrukcja switch nie działa
» 2017-03-29 19:05:23
Witam. Po prawie rocznej przerwie w programowaniu powróciłem na łono natury i tak na szybkiego napisałem taki oto program:
C/C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;


void dodaj_ksiazke( std::string & content, bool append = false ) {
    std::ofstream out;
    cout << "Podaj tytul ksiazki:";
    getline( cin, content );
   
    if( append )
         out.open( "ksiegarz.txt", ios::app );
    else
         out.open( "ksiegarz.txt", ios::app );
   
    out << content;
    out << endl;
   
    out.close();
}
int main()
{
    string content;
    bool append = false;
   
    cout << "[1]. Dodaj ksiazke do listy" << endl;
    cout << "Podaj numer opcji:";
    int sel = 0;
    cin >> sel;
    switch( sel )
    {
    case 1: dodaj_ksiazke( content, append ); break;
    }
    //cout<<"Pozycja zostala dodana"<<endl;
   
    cin.get();
    return 0;
}
Program w postaci jaki wyżej widać działa tak jak działa tzn. działa nie poprawnie bo nie wpisuje do pliku wczytanych danych. Poniżej wersja programu bez instrukcji switch który to program działa bez zarzutu. Problemem właśnie jest instrukcja switch… Czy ktoś mógłby rzucić okiem I powiedzieć dlaczego program bez switch działa tak jak należy a z instrukcją switch nie? Kompilator to code blocks 16.1
C/C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;


void dodaj_ksiazke( std::string & content, bool append = false ) {
    std::ofstream out;
    cout << "Podaj tytul ksiazki:";
    getline( cin, content );
   
    if( append )
         out.open( "ksiegarz.txt", ios::app );
    else
         out.open( "ksiegarz.txt", ios::app );
   
    out << content;
    out << endl;
   
    out.close();
}
int main()
{
    string content;
    bool append = false;
    dodaj_ksiazke( content, append ); break;
    //cout<<"Pozycja zostala dodana"<<endl;
   
    cin.get();
    return 0;
}
P-159579
marcolo2307
» 2017-03-29 19:26:35
C/C++
cin.clear();
cin.sync();
po wprowadzeniu opcji.

Jeśli przed getline używałeś cin to musisz z tego skorzystać, aby usunąć znak nowej linii z bufora.
P-159580
wojownik266
Temat założony przez niniejszego użytkownika
» 2017-03-29 19:34:06
Wielkie dzięki! Teraz śmiga aż miło:)
P-159581
j23
» 2017-03-30 11:07:55
@marcolo2307, wystarczy użyć metody ignore.
P-159597
marcolo2307
» 2017-03-30 17:29:25
Według http://cpp0x.pl/kursy/Kurs-C++​/Poziom-1​/Obsluga-strumienia-wejscioweg​o​/12 lekcji, obie metody są poprawne, z tym, że sync zadziała tylko na Windowsie. Dobrze rozumiem?
P-159602
jankowalski25
» 2017-03-30 17:52:48
Nie używaj
sync
 do takich celów. Parę razy ten temat już się przewinął na forum, przykładem jest post P-78948 na drugiej stronie tematu [C++] Wytwarzanie kodu pod Windowsa i Linuxa.
P-159603
marcolo2307
» 2017-03-30 19:42:42
@jankowalski25, hmm, dzięki :D
P-159612
« 1 »
  Strona 1 z 1