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

Problem z continue

Ostatnio zmodyfikowano 2017-09-29 10:52
Autor Wiadomość
ksardias
Temat założony przez niniejszego użytkownika
Problem z continue
» 2017-09-28 18:35:35
[EDIT]
Program po wybraniu case 1, zatwierdzeniu danych, wraca do menu i jak się odrazu wciśnie '2' to program dziala od pętlni while, a jak od początku wybierze się '2' to jest normalnie
C/C++
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <string>
#include <fstream>

using namespace std;
int l = 1, i = 1, k, w, nr_linii = 1, numer_klienta;
fstream plik;
string linia, klient[ 1000000 ], samochod[ 100000 ], imie, nazwisko, numer_tel, marka, model, rocznik, vin;
char wybor, potwierdzenie, wybor2;
int main()
{ for(;; )
    { system( "cls" );
        cout << " Menu glowne" << endl;
        cout << " -------------" << endl;
        cout << " 1. Dodaj nowego klienta " << endl;
        cout << " 2. Lista klientow " << endl;
        cout << " 3. Dodaj nowe zlecenie" << endl;
        cout << " 4. Zaktualizuj postep prac" << endl;
        cout << " 5. Kalendarz prac" << endl;
        cout << " 6. Wyjscie" << endl;
        cout << "L: " << l << endl;
        wybor = getch();
        switch( wybor )
        {
        case '1':
            {
                do //Pêtla niepoprawnych danych
                {
                    system( "cls" );
                    cout << "Imie: ";
                    cin >> imie;
                    cout << "Nazwisko: ";
                    cin >> nazwisko;
                    cout << "Numer tel: ";
                    cin >> numer_tel;
                    klient[ l ] = imie + " " + nazwisko + " " + numer_tel;
                    cout << klient[ l ] << endl;
                    cout << "Potwierdzasz dane? [T/N] ";
                    potwierdzenie = getch();
                }
                while( potwierdzenie == 'n' || potwierdzenie == 'N' );
               
                switch( potwierdzenie )
                {
                case 'T':
                case 't':
                    {
                        plik.open( "wizytowka.txt", ios::out | ios::app );
                        plik << l << ". " << klient[ l ] << endl;
                        l = l + 1;
                        plik.close();
                        plik.clear();
                        system( "cls" );
                        continue; //bug, nie działa tylko na case '2'
                    }
                    default:
                    {
                        cout << "Nie ma takiej opcji!";
                        getch();
                        continue;
                    }
                }
            }
        case '2':
            {
                system( "cls" );
                cout << "s";
                plik.open( "wizytowka.txt", ios::in );
                if( plik.good() == false ) cout << "Plik nie istnieje!";
               
                while( getline( plik, linia ) )
                {
                    klient[ i ] = linia;
                    cout << klient[ i ] << endl;
                    i++;
                }
                getchar();
                plik.close();
                plik.clear();
                system( "cls" );
                cout << "Wybierz numer klienta: ";
                cin >> numer_klienta;
                cout << klient[ numer_klienta ];
                getch();
                continue;

[EDIT] Błąd kopiarski z tymi klamrami
P-165299
sppmacd
Case
» 2017-09-28 18:38:07
W konstrukcji switch-case nie może być continue, ponieważ to słowo kluczowe odnosi się do pętli
http://cpp0x.pl/kursy/?nro=295 Słowa kluczowe continue, break

[EDIT]
 Przydało by się to rozdzielić na funkcje
P-165300
ksardias
Temat założony przez niniejszego użytkownika
» 2017-09-28 18:40:25
no tak, teraz już edytowałem, to jest wszystko w pętli
P-165301
latajacaryba
» 2017-09-28 18:40:49
1. Warto by choć spróbować opisać problem. Dla ciebie to minuta, a użytkownicy muszą kopać w kodzie.
2. Lepiej zmień nazwę tematu, zanim moderator wrzuci go do bezużytecznych.
3. Co tu robi
continue
? nie chodziło ci o
break
?

EDIT:
Popieram sppmacd
Poza tym, dlaczego tutaj są 2 klamry?
C/C++
switch( wybor )
{
    {
    case '1':

EDIT2:

Na twoim miejscu napisałbym to od nowa, bo w tym stanie, no sorry, ale to reanimowanie trupa. Zagnieżdżenia w zagnieżdżeniach zagnieżdżenia zagnieżdżające. Podziel sobie to na sensowne funkcje - PodajDane(...), WczytajPlik(...), ZapiszDoPliku(...). i nie maltretuj tak tego continue, zrób coś tego typu:
C/C++
case: '1'
{
    PodajDane();
    ZapiszDaneDoPliku();
    break;
}
P-165302
ksardias
Temat założony przez niniejszego użytkownika
» 2017-09-28 18:49:24
ale dlaczego ten bug występuje tylko po wyborze '1' niż '2', a jak wybierze się odrazu '2' to jest okay i dlaczego omija pętle while?
P-165304
ksardias
Temat założony przez niniejszego użytkownika
» 2017-09-29 09:41:39
Dobry pomysł, dzięki za rade, chociaż szkoda że nie udało się znaleźć bug'a.
P-165336
ksardias
Temat założony przez niniejszego użytkownika
» 2017-09-29 10:52:41
Zrobiłem tak jak radziliście i przy okazji znalazłem bug'a okazał się nim getchar, zmieniłem na getch i jest dobrze
C/C++
case '2':
{
    system( "cls" );
    cout << "s";
    plik.open( "wizytowka.txt", ios::in );
    if( plik.good() == false ) cout << "Plik nie istnieje!";
   
    while( getline( plik, linia ) )
    {
        klient[ i ] = linia;
        cout << klient[ i ] << endl;
        i++;
    }
    getch();
    plik.close();
    plik.clear();
P-165338
« 1 »
  Strona 1 z 1