Hejka. Chciałabym się Was poradzić, co można zrobić w tym kodzie, aby pozbyć się błędu i sprawić, żeby funkcja liczyła długość wprowadzonych znaków (chodzi o PESEL).
Kod programu:
#include <list>
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
list<int>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<int>::iterator w=lista_systemu.begin(); w!=lista_systemu.end(); ++w)
{
cout << *w << " ";
cout << endl;
cout << "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-" << endl << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
}
}
void push_front()
{
string imie, nazwisko, plec, floor;
int dzien, miesiac, rok_urodzenia, nr_PESEL, dlugosc_PESEL, wynik;
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;
}
cout << "Podaj numer PESEL: ";
cin >> nr_PESEL;
double temp = dlugosc_PESEL;
while(floor(dlugosc_PESEL) < dlugosc_PESEL)
{
dlugosc_PESEL *= 10;
wynik++;
}
while(temp >= 1)
{
temp /= 10;
wynik++;
}
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(nr_PESEL);
}
void push_back()
{
string imie, nazwisko, plec;
int dzien, miesiac, rok_urodzenia, nr_PESEL;
cout << "WSTAWIANIE DANYCH NA KONIEC LISTY" << endl;
cout << "Podaj plec(Kobieta/Mezczyzna): " << endl;
cin >> plec;
if(plec!="Kobieta" && plec!="Mezczyzna")
{
printf("Niepoprawna plec!");
return;
}
cout << "Podaj imie: ";
cin >> imie;
cout << "Podaj nazwisko: ";
cin >> nazwisko;
cout << "Podaj dzien urodzenia: ";
cin >> dzien;
cout << "Podaj miesiac urodzenia: ";
cin >> miesiac;
cout << "Podaj rok urodzenia: ";
cin >> rok_urodzenia;
cout << "Podaj numer PESEL: ";
cin >> nr_PESEL;
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(nr_PESEL);
}
void pop_front()
{
printf("Za chwile nastapi usuniecie osoby, ktora jest na poczatku listy...");
Sleep(3000);
lista_systemu.pop_front();
}
void pop_back()
{
printf("Za chwile nastapi usuniecie osoby, ktora jest na koncu listy...");
Sleep(3000);
lista_systemu.pop_back();
}
void size()
{
cout << "Na liscie jest: " << lista_systemu.size() << "osob.";
Sleep(3000);
}
void max_size()
{
cout << "Maksymalna ilosc osob, ktora mozna przechowac to: " << lista_systemu.max_size();
}
void empty()
{
cout << "Czy lista systemu jest pusta? Sprawdzmy... -------> ";
if(lista_systemu.empty()==1)
{
cout << "Lista w systemie jest pusta.";
}
else cout << "Lista w systemie nie jest pusta.";
Sleep(3000);
}
void remove()
{
int nr_PESEL ;
cout << "Usuwanie pozycji o tym samym PESELU: ";
cin >> nr_PESEL;
Sleep(3000);
}
void sort()
{
cout <<"Za chwile nastapi posortowanie listy wedlug identyfikatora: ";
lista_systemu.sort();
Sleep(3000);
}
void reverse()
{
cout <<"Za chwile nastapi posortowanie listy w odwrotnej kolejnosci: ";
lista_systemu.reverse();
Sleep(3000);
}
void exit()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
cout << "Za chwile nastapi zamkniecie programu! Zapraszamy ponownie.";
Sleep(3500);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0);
}
int main()
{
do
{
Wyswietl_Dane();
cout << "MENU GLOWNE LISTY SYSTEMU: " << endl;
cout << "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-" << endl;
cout << "1. push_front - dodawanie na poczatku listy" << endl;
cout << "2. push_back - dodawanie na koncu listy" << endl;
cout << "3. pop_front - usuwanie na poczatku listy" << endl;
cout << "4. pop_back - usuwanie na koncu listy" << endl;
cout << "5. size - sprawdzenie ilosci elementow na liscie" << endl;
cout << "6. max_size - sprawdzenie maksymalnej ilosci elementow na liscie" << endl;
cout << "7. empty - sprawdzenie, czy lista jest pusta" << endl;
cout << "8. remove - usuniecie osoby o takim samym numerze PESEL" << endl;
cout << "9. sort - sortowanie listy systemu rosnaco" << endl;
cout << "10. reverse - sortowanie listy w odwrotnej kolejnosci" << endl;
cout << "11. exit - wyjscie z programu" << endl;
cout << "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-" << endl;
cout << "Wybor funkcji: ";
cin >> funkcja;
switch(funkcja)
{
case 1: push_front(); break;
case 2: push_back(); break;
case 3: pop_front(); break;
case 4: pop_back(); break;
case 5: size(); break;
case 6: max_size(); break;
case 7: empty(); break;
case 8: remove(); break;
case 9: sort(); break;
case 10: reverse(); break;
case 11: exit(); break;
default:
cout << "Ups! Cos poszlo nie tak!";
Sleep(3000);
break;
}
}
while(funkcja!=11);
return 0;
}
Błąd pojawia się w linijce 72:
while(floor(dlugosc_PESEL) < dlugosc_PESEL)
Błąd brzmi:
Error: no match for call to (std::__cxxll::string {aka std::__cxxll::basic_string<char>}) (int&)'
Byłabym ogromnie wdzięczna za pomoc. :)