Hej, jestem początkująca w programowaniu także proszę o wyrozumiałość i opisywanie w miarę prostym językiem, dzięki z góry :D
Pisząc bibliotekę, przy użyciu funkcji length w konstruktorze zapamiętuje ona rozmiar "pierwotnego" napisu i jedynie dopisuje rozmiar tego właściwego.
konstruktor w strukturze, w pliku o rozszerzeniu .h: Osoba(string I="", string N="", string P="", int W=1);
wywołanie w programie testującym: ktos=Osoba ("Jan", "Nowak", "00301309169", 178);
Problem pojawił się przy próbach uzyskania komunikatu o błędzie za pomocą throw invalid_argument kiedy pesel jest długości innej niż 11 znaków. Wyświetliłam sobie wartosć jaką dla rzeczonego peselu przyjmuje length() i otrzymałam jego faktyczną długość poprzedzoną (w przypadku powyższego kodu) zerem. Zero zmieniało się na inne wartości, w zależności od ilości spacji. Oczywiście rozmiar imienia też wynosił 03, nazwiska 05 itd.
Jak w inny sposób zadeklarować napis pusty, aby to ominąć lub pozbyć się tego pierwotnego rozmiaru z tego co zwraca funkcja length?
Kod źródłowy:
bib_osoby.h
struct Osoba
{
string imie;
string nazwisko;
int pesel[11];
int wzrost;
void wypisz();
Osoba(string I="", string N="", string P="", int W=1);
};
test.cpp
#include "bib_osoby.h"
#include <iostream>
using namespace std;
int main ()
{
Osoba ktos;
ktos=Osoba ("Jan", "Nowak", "00301309169", 178);
ktos.wypisz();
return 0;
}
konstruktor z bib_osoby.cpp
Osoba::Osoba(string I, string N, string P, int W)
{
imie=I, nazwisko=N;
if (W>0)
wzrost=W;
else throw invalid_argument ("niepoprawny wzrost");
if (P.length()!=11) throw invalid_argument ("niepoprawna dlugosc peselu");
cout << P.length();
for(int i=0;i<11;i++)
{
if(P[i]<'0'||P[i]>'9')
throw ("niepoprawna liczba w peselu");
else
pesel[i]=P[i]-'0';
}
}