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

C++ nietypowy błąd - Code Blocks

VPS Starter Arubacloud
0 głosów
691 wizyt
pytanie zadane 4 stycznia 2019 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

Hejka. Chciałabym się Was zapytać, co jest zrobione nie tak w kodzie, że wpisując pesel do konsoli, który powinien mieć 11 znaków, wyświetla komunikat "Błąd" i dodatkowo program wraca do początku z błędem "Niepoprawna plec!". A jeśli wpiszę długość peselu różną od 11 to wyskakuje komunikat "Błędu" i wraca do początku do "switcha" poprawnie.
Funkcja błędu:
 

void push_front()
{
    string imie, nazwisko, plec;
    int dzien, miesiac, rok_urodzenia;
    long pesel;
    cout << "WSTAWIANIE DANYCH NA POCZATEK LISTY" << endl;
    cout << "Podaj plec(Kobieta/Mezczyzna): ";
    cin >> plec;
    if(plec!="Kobieta" && plec!="Mezczyzna")
    {
        printf("Niepoprawna plec!");
        Sleep(3000);
        return;
    }
    cout << "Podaj imie: ";
    cin >> imie;
    cout << "Podaj nazwisko: ";
    cin >> nazwisko;
    cout << "Podaj dzien urodzenia: ";
    cin >> dzien;
    if(dzien>31 || dzien<1)
    {
        printf("Nieprawidlowy dzien! Sprobuj od nowa.");
        Sleep(3000);
        return;
    }
    cout << "Podaj miesiac urodzenia: ";
    cin >> miesiac;
    if(miesiac>12 || miesiac<1)
    {
        printf("Nieprawidlowy miesiac! Sprobuj ponownie.");
        Sleep(3000);
        return;
    }
    cout << "Podaj rok urodzenia: ";
    cin >> rok_urodzenia;
    if(rok_urodzenia>2019 || rok_urodzenia<1900)
    {
        printf("Nieprawidlowy rok! Sprobuj wypelnic dane jeszcze raz.");
        Sleep(3000);
        return;
    }
    std::string pesel_length_as_text = std::to_string (pesel);

    int pesel_length = pesel_length_as_text.length();
    cout << "Podaj swoj PESEL(powinien miec 11 cyfr): ";
    cin >> pesel;

    if(pesel_length != 11)
    {
        std::cout<<"Blad!";
        Sleep(3000);
        return;
    }
    else {
        std::cout<<"11";

    lista_systemu.push_front(plec[10]);
    lista_systemu.push_front(imie[30]);
    lista_systemu.push_front(nazwisko[30]);
    lista_systemu.push_front(dzien);
    lista_systemu.push_front(miesiac);
    lista_systemu.push_front(rok_urodzenia);
    lista_systemu.push_front(pesel);

}
}

 

1 odpowiedź

0 głosów
odpowiedź 4 stycznia 2019 przez gagyn Stary wyjadacz (11,050 p.)
long pesel; // deklarujesz tutaj zmienną pesel
std::string pesel_length_as_text = std::to_string (pesel); // zamieniasz int na string, pomimo,
                                                         // że int nie ma wczytanej wartości
 
int pesel_length = pesel_length_as_text.length();           // określasz długość zmiennej zawierającej losową wartość
cout << "Podaj swoj PESEL(powinien miec 11 cyfr): ";
cin >> pesel;                 // tu dopiero wczytujesz
 
if(pesel_length != 11)
{
    std::cout<<"Blad!";
    Sleep(3000);
    return;
}
else {
    std::cout<<"11";

Prześledź komentarze, które dopisałem do twojego kodu.

komentarz 4 stycznia 2019 przez gorgonkowa Obywatel (1,810 p.)

Hmm... to ciekawe. Gdy przekształciłam kod w taki sposób:
 

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

using namespace std;

struct wpis
{
	std::string imie;
	std::string nazwisko;
	std::string plec;
	int dzien;
	int miesiac;
	int rok_urodzenia;
	std::string pesel;
};

wpis w;

list<wpis>lista_systemu; //utworzenie listy, która przechowuje liczby całkowite
int funkcja;

void Wyswietl_Dane()
{
    system("CLS");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
    cout << "SYSTEM ZARZADZANIA OBIEGIEM INFORMACJI: " << endl;
    cout <<"-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-" << endl;
    for(list<wpis>::iterator w=lista_systemu.begin(); w!=lista_systemu.end(); ++w)
    {
        cout << *w << " ";

        cout << endl;
        cout << "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-" << endl << endl;
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);

    }
}

To jest jeszcze ta wersja windowsowa (ponieważ może być uruchamiana z tego komputera :P). Tutaj pokazuje błąd przy linijce 32:
cout << *w << " ";
A opis błędu mówi:
Error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}') and 'wpis'

komentarz 4 stycznia 2019 przez j23 Mędrzec (194,920 p.)
cout << w->imie << ' ' << w->nazwisko << ' '  << /* itd. */;

 

komentarz 4 stycznia 2019 przez gagyn Stary wyjadacz (11,050 p.)
Ale w tym przypadku "w" nie jest wskaźnikiem, więc odwołanie chyba jest za pomocą kropki?
komentarz 4 stycznia 2019 przez j23 Mędrzec (194,920 p.)

W pętli w jest iteratorem.

komentarz 4 stycznia 2019 przez gagyn Stary wyjadacz (11,050 p.)

A faktycznie, zasugerowałem się tą linijką:

wpis w;

 

Podobne pytania

0 głosów
1 odpowiedź 1,041 wizyt
pytanie zadane 25 lipca 2016 w C i C++ przez Coroys Początkujący (370 p.)
0 głosów
1 odpowiedź 203 wizyt
0 głosów
0 odpowiedzi 566 wizyt
pytanie zadane 29 marca 2019 w C i C++ przez Milo Obywatel (1,180 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...