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

question-closed Proste dodawanie język C

VPS Starter Arubacloud
0 głosów
640 wizyt
pytanie zadane 10 września 2019 w C i C++ przez Huti Nowicjusz (140 p.)
zamknięte 10 września 2019 przez Huti

Witam,

Napisałem taki oto kod, wydaje mi się, że program działa poprawnie. Niestety SPOJ go nie akceptuje i wyrzuca błąd SIGABRT. Przeszukałem już google ale nie udało mi się znaleźć rozwiązania problemu. Bardzo proszę o pomoc i pozdrawiam.

#include <stdio.h>

int main(void){

    int n = 0;
    char liczby[n];
    int testy;
    int i,j,k = 0;
    int suma = 0;

    scanf("%d", &testy);

    for(i = 1; i <= testy; i++){

        scanf("%d", &n);
        scanf("%d", &liczby[k++]);

        while(getchar() != '\n' && k < n)
            scanf("%d", &liczby[k++]);

        for(j = 0; j < n; j++){
            if(liczby[j] != ' '){
                suma += liczby[j];
            }
            else
                continue;
        }
        printf("%d\n", suma);
        suma = 0;
        k = 0;
        n = 0;
    }
    return 0;
}

 

komentarz zamknięcia: Problem rozwiązany
komentarz 10 września 2019 przez tkz Nałogowiec (42,000 p.)
    int n = 0;
    char liczby[n];

Tak ma być?

&liczby[k++]

Tak też?

komentarz 10 września 2019 przez Huti Nowicjusz (140 p.)

Zamieniłem to

&liczby[k++]

na pętlę

for (k = 0; k < n; k++)
                scanf("%d", &liczby[k]);

Ale nie wiem jak sobie poradzić z definiowaniem rozmiaru tablicy. W treści zadania nie ma podane ile liczb maksymalnie zostanie wpisane. Rozumiem, że problem tutaj jest taki, że tablica nie może mieć rozmiaru 0, ale jeśli nie zdefiniuje tego zera na początku program kończy swoje działanie zaraz po kompilacji.

komentarz 10 września 2019 przez tkz Nałogowiec (42,000 p.)
Kurcze, dziwię się, że to Ci się w ogóle skompilowało. Warto na pewno powtórzyć podstawy. Fajnie jakbys podał link do zadania. Po za tym musisz zdefiniować wielkość tablicy. Piszesz w C, możesz skorzystać z VLA.
komentarz 10 września 2019 przez Huti Nowicjusz (140 p.)
Link do zadania: https://pl.spoj.com/problems/RNO_DOD/.

Dopiero zaczynam z programowaniem, może troche za wcześnie wziąłem się za zadania ze SPOJ'a, ale kilka udało mi się rozwiązać dlatego próbuję dalej :)
komentarz 10 września 2019 przez mokrowski Mędrzec (155,460 p.)

@Huti, To zadanie rozwiązuje się bez tablicy. Wystarczy zliczać ilość wczytywanych danych i je sukcesywnie dodawać. Nie staraj się także na siłę używać tablic VLA. Ta właściwość języka jest usilnie odradzana i w nowych standardach C jest już wyłącznie opcjonalna.

komentarz 10 września 2019 przez tkz Nałogowiec (42,000 p.)
przywrócone 10 września 2019 przez tkz
Poczytaj o dynamicznych tablicach w C, oraz ich zapełniaiu. Z resztą sobie na pewno poradzisz.
komentarz 10 września 2019 przez tkz Nałogowiec (42,000 p.)

mokrowski To co napisał faktycznie wydaje się łatwiejsze i czytelniejsze, i takie jest.

Gotowy kod jakbyś chciał zobaczyć. Nie wiem czy go zaliczy, nie mam spoja. 


















#include <stdio.h>

int main(void)
{
    int t;
    scanf("%i", &t);//ilosc testów
    while (t) //tak długo az ilosc testów nie bedzie rowna 0
    {
        int k = 0;
        int g = 0;
        int equale = 0;
        scanf("%i", &g);
        while(g)
        {
            scanf("%i", &k);
            equale+=k;
            g--;
        }
        printf("%i \n", equale); //wyswietlamy dane
        t--;//dekrementujemy ilosc restow
    }

    return 0;
}
komentarz 10 września 2019 przez Huti Nowicjusz (140 p.)
Dziękuję Wam za pomoc, już rozumiem o co chodzi!

Podobne pytania

0 głosów
2 odpowiedzi 518 wizyt
pytanie zadane 11 lutego 2019 w C i C++ przez Zydu Początkujący (340 p.)
0 głosów
1 odpowiedź 207 wizyt
0 głosów
1 odpowiedź 931 wizyt
pytanie zadane 29 października 2016 w C i C++ przez kamil1996 Nowicjusz (120 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 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!

...