1 / 39
Aug 2017

Witam, nie jestem w stanie zrozumieć dlaczego pojawia się błąd SIGSEGV. Wiem, że jest to najprawdopodobniej błąd związany z odwołaniem się do nieistniejącego miejsca w tablicy, ale nie mogę zlokalizować owego błędu w kodzie.

Link do kodu: https://ideone.com/LaYvAe63

  • created

    Aug '17
  • last reply

    Oct '20
  • 38

    replies

  • 2.3k

    views

  • 14

    users

  • 6

    likes

  • 11

    links

while(cin>>imie>>nazwisko>>tekst>>data)
cin pobiera znaki aż do napotkania spacji, tabu, lub znaku nowej lini, przez co Twoje zmienne wyglądają dla pierwszego przykładu tak:
imie = Imie:
nazwisko = Roman;
tekst = Nazw:
data = Kowalski6;

Ok, czyli jednak między Imie: Roman jest jednak spacja, zastanawiałem się nad tym, ale doszedłem do wniosku, ze jej tam nie ma. Dziękuje za pomoc.

edit:Niestety nie to było przyczyną problemu z blędem SIGSEGV. Kod wygląda teraz tak. https://ideone.com/VfjR2626

Na razie rada nr. 1 - przeczytaj uważnie treść zadania :slight_smile:
a potem pomyśl jakie inne błędy mogą wystąpić poza tymi, które przewidziałeś

A jaka jest rada nr. 2? Czytałem to zadanie już bardzo dużo razy i jeśli to jest nawet coś oczywistego to mogłem tego nie zauważyć i wątpię, aby mi się to udało. Czy mógłbyś mi przynajmniej powiedzieć, która część kodu kuleje?

Dodatkowo, robiąc parę testów zauważyłem, że dla przykładów:

Imie: Marcin; Nazwisko: Kowal; Data ur.: 1900-0+-01 oraz
Imie: Marcin; Nazwisko: Kowal; Data ur.: 1900-01-01 w obu przypadkach dostaję wartość 1, kiedy w pierwszym powinienem dostać 2, a w drugim 3. Sugeruje to jakiś problem z weryfikacją nazwiska, ale nie mogę ogarnąć jaki.

Czy chodzi Ci o ten fragment:
"poprawne nazwiska zaczynają się od wielkiej litery, po której następują małe litery;"
W komentarzu pod zadaniem jest takie coś:
W opisie jest błąd dotyczący opisu poprawności nazwiska, aby dostać AC należy założyć, że poprawne nazwisko to takie, które zaczyna się z dużej litery, po której MOGĄ wystąpić małe litery.

No i tym się zasugerowałem.

zakładając, że komentarz jest prawdziwy, to co należy sprawdzić ?

ale również pomyśl o innych możliwych błedach

Nie widzę, więc póki co zajmę się jakimś innym zadankiem, a potem wrócę.

10 months later

Cześć. Próbuję rozwiązać zadanie Formularz, stosowałem rady innych na forum, ale nadal nie zalicza mi zadania. Czy mógłby ktoś pomóc. Kod w c++:

Nie wiem czy dobrze rozumiem - tekst wczytywany przez sędziego jest analogiczny do tego co w przykładzie(Imie: Roman; Nazwisko: Kowalski6; Data ur.: 1900-01-30), czyli ważne są średniki, i myślniki, czy mam to sprawdzać? Albo coś przeoczyłem w kodzie. Proszę o pomoc :slight_smile:

test:
Imie: Z; Nazwisko: Za; Data ur.: 1900-1–30

A mi u matfila wyświetla 3-kę (tam są dwa myślniki po 1ce, przy kopiowaniu czemuś je skleja).

Ok, teraz dobrze chociaż nie wiem czy są takie testy.
Natomiast @matfil z pewnością skasuj to system("pause");. Nie wiem czy może zaburzyć wynik, ale z pewnością nie powinno tego być (jak Twój kurs c++ twierdzi inaczej to zmień kurs :P)

Edit…
ale z pewnością taki może być:
Imie: Z; Nazwisko: Za; Data ur.: 1900-1a-30
(zmiana myślnika na dowolny inny znak też Ci daje 3 co już raczej nie powinno się zdarzyć)

@yula
Trzeba wklejać jako kod, one (dwa myślniki) się sklejają także w wordzie więc pewnie to domyślne formatowanie.

Będę wiedzieć na przyszłość, a przynajmniej zwracać na to uwagę :slight_smile: I tak, poprawienie tego błędu dało mi AC kodem @matfil

Super :slight_smile: dziękuję bardzo postaram się poprawić błędy, teraz już nie wypisuje 3 w przykładzie Imie: Z; Nazwisko: Za; Data ur.: 1900-1a-30 , czy Imie: Z; Nazwisko: Za; Data ur.: 1900-1–30 , ale sędzia nadal nie przyjmuje

a co zrobiłeś? Zastanowiłeś sie dlaczego to wypisywało ?

@yula
Teraz sprawdza czy MM i DD jest liczbą za pomocą kodu ascii, chyba to mieliście na myśli podając przykład Imie: Z; Nazwisko: Za; Data ur.: 1900-1a-30

a rok to nie ma cyferek :wink:

Tak, dokładnie o to chodziło, tyle że nie tylko MM i DD składa sie z cyferek :smiley:

Ja należę do ludzi leniwych i stwierdziłem, że jak sprawdzę czy rok jest między 1900 a 2000 to nie muszę już sprawdzać, czy są to tylko cyferki :smile:
Niestety nadal nie działa :C