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 #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 { 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; } 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 |
|
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 |
|
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 |
|
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? 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: case: '1' { PodajDane(); ZapiszDaneDoPliku(); break; }
|
|
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? |
|
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. |
|
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 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();
|
|
« 1 » |