1 / 8
Nov 2023

Cześć,

Mam problem z rozwiązaniem zadania KC010 - Zliczanie Liczb i Wyrazów. Napisałem dwa bardzo podobne do siebie programy - pierwszy w C, a drugi w C++ (linki poniżej). Co ciekawe program w C++ został zaliczony przez sędziego, a ten w C - nie. Czy jest tutaj może jakiś “weteran C”, który pomoże mi w rozwiązaniu problemu?

  • created

    Nov '23
  • last reply

    Nov '23
  • 7

    replies

  • 233

    views

  • 3

    users

  • 4

    likes

  • 1

    link

Hej,

to nie jest bezpośrednie wskazanie problemu w Twoim kodzie, ale właśnie przerobiłem ten kod w C na dostający AC z wykorzystaniem getline. Dlaczego nie poszedłeś tą drogą?

[EDIT]
Aaa, już wiem co chciałeś osiągnąć :slight_smile: Problem z fgets jest tutaj taki, że nie wiesz, ile znaków mają linie albo nie doczytałeś dokumentacji tej funkcji. Zalecam eksperyment: zmień MAX_STR_SIZE na coś małego, np. 5 i odpal kod. Zobaczysz przyczynę WA.

Dzięki za szybką odpowiedź, tym bardziej że rozwiązałeś mój problem :slight_smile: !

Pokombinowałem trochę z getline() i zadziałało. Choć ustawienie rozmiaru bufora na 1024 bajty (znaki) wydaje się nad wyraz hojne, to chyba rzeczywiście skończony rozmiar bufora jest problemem - w końcu nie wiemy jak został napisany test :wink: .

Użycie “nieograniczonego” bufora (tak naprawdę ograniczonego rozmiarem typu unsigned long long) w połączeniu z getline() załatwiło sprawę.

Jak coś na forum obowiązuje zasada, że po rozwiązaniu zadania usuwamy linki do kodu oraz sam kod. Możesz w tym celu wyedytować wiadomość. Nie, żeby nie dało się go potem obejrzeć w historii edycji, ale to już każdy robi na własną odpowiedzialność :wink:

BTW Twój kod da się jeszcze poprawić. Zdublowane warunki w ifach zapewne widzisz, ale nwm czy wiesz, że można zrobić while(getline). To tak informacyjnie.

Dzięki za sugestie.

Wrzuciłem getline() do pętli:

while ((str_len = getline(&str_ptr, &str_max_len, stdin)) != -1)

No i zagnieździłem if'y. Śmiga! :smiley:

Jeszcze pytanko - usunąłem linki do ideone.com, a czy da radę oznaczyć wątek jako solved lub w inny, podobny sposób?

No to jeszcze moja sugestia. Poszukaj, przeczytaj i weź do serca zasady. To forum nie jest polsko-języczne! Wystarczyło się tylko “rozejrzeć”.

Ogarnięte, dzięki. Zmieniłem też kategorie na górze, żeby zagraniczni nie musieli czytać naszego pięknego języka. :wink:

Nie :slight_smile: Co więcej, przyjmujemy zasadę, że ludzie mający określony problem powinni pisać w już istniejących wątkach :slight_smile: Kwestia porządku: inaczej mielibyśmy (i tak mamy, niestety…) dziesiątki wątków typu “nie działa zadanie X” i w każdym przypadku ten sam lub podobny problem.