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

Polski SPOJ zadanie z SUMĄ w języku C

VPS Starter Arubacloud
0 głosów
267 wizyt
pytanie zadane 21 marca 2020 w C i C++ przez lukasz07it Początkujący (290 p.)

Witam, jest to mój pierwszy post na tym forum i wiem, że pytania odnośnie tego zadania wiele razy się pojawiały, ale nie znalazłem, nic na temat odpowiedzi do tego zadnia w języku C.
Treść zadania: https://pl.spoj.com/problems/SUMA/

Oto mój kod:


#include <stdio.h>

int main()
{
int a,suma = 0;
while (scanf("%d", &a)) {
suma += a;
printf("%d\n", suma);
}
return 0;
}

Nie mam żadnego pomysłu, czemu to może nie działać.
Przepraszam, za możliwe błędy przy tworzeniu tego postu i liczę na Waszą pomoc  .

3 odpowiedzi

+1 głos
odpowiedź 21 marca 2020 przez Whistleroosh Maniak (56,900 p.)
wybrane 21 marca 2020 przez lukasz07it
 
Najlepsza

W zasadzie musisz zmienić tylko jedną rzecz, a mianowicie linię 6. zastąpić tym:

while (scanf("%d", &a) == 1)

Jako błąd dostajesz pewnie SIGXFSZ. On wynika z tego, że ta pętla działa w nieskończoność, bo zauważ, że scanf będzie zwracał 1, dopóki pobiera jakieś dane, a w przeciwnym razie, gdy natrafi na EOF, zwróci -1. Tylko -1 zamieni się na true, więc pętla się nie zakończy.

W takich zadaniach dobrze też korzystać z long long, żeby nie wyszło poza inta, tak jak powiedział profesorek96.

komentarz 21 marca 2020 przez lukasz07it Początkujący (290 p.)
Dziękuję bardzo!  Mam również pytanie co zwraca "cin" z C++, ponieważ gdy robiłem to zadanie w tym języku działało bez problemu.
komentarz 21 marca 2020 przez Whistleroosh Maniak (56,900 p.)

Tutaj sprawa wygląda nieco inaczej. Ogólnie wszystko masz opisane tutaj, ale prosto mówiąc, zwróci true, jeżeli można przekonwertować wczytaną wartość na typ zmiennej, do której wczytujesz, a w przeciwnym wypadku false.

komentarz 22 marca 2020 przez lukasz07it Początkujący (290 p.)

@Whistleroosh, jeszcze jedno pytanie nasunęło mi się dziś co do tego zadania, oczywiści kod tak zmieniony działa na SPOJu, ale kiedy testuję go sam w visualu, to kiedy ta pętla powinna się zakończyć, ponieważ jeśli wciskam sam "Enter" bez żadnej wartości, to wciąż program działa i mogę wpisywać inne wartości.

komentarz 22 marca 2020 przez Whistleroosh Maniak (56,900 p.)
Jeżeli nic nie wpisałeś i wcisnąłeś enter, to program powinien tak naprawdę wciąż działać. Bo zauważ, że cin i scanf pobierają jakąś wartość do zmiennej, ale żeby ją pobrać użytkownik musi wpisać coś z klawiatury i wcisnąć enter. Jeżeli w kodzie skorzystałeś z cin lub scanf to znaczy, że program musi definitywnie coś wczytać, czyli będzie oczekiwał tak długo, aż coś wpiszesz, a sam enter nie jest przez niego wczytywany. Czyli żeby zakończyć taką pętlę musiałbyś wpisać jakiś znak, który nie przekonwertuje się na inta.
+1 głos
odpowiedź 21 marca 2020 przez profesorek96 Szeryf (91,420 p.)
Moja propozycja to zmienić typ z int na long long. Oczywiście wtedy musisz zmienić %d w scanf jak i printf na %ll.
0 głosów
odpowiedź 21 marca 2020 przez poldeeek Mądrala (5,980 p.)
Wprawdzie zadania ze SPOJ robiłem dobre kilka lat temu, ale pamiętam, że często problem polegał na tym, żę wejście i wyjście musiały być dokładnie tak jak w zadaniu. Spróbuj może napisać ten program tak, że najpierw podajesz te liczby i dopiero po podaniu wszystkich niech on je wypisze..
komentarz 21 marca 2020 przez Whistleroosh Maniak (56,900 p.)
SPOJ powinien radzić sobie z wypisywaniem wejścia w dowolnej części programu, więc o to nie trzeba się martwić

Podobne pytania

0 głosów
2 odpowiedzi 207 wizyt
pytanie zadane 13 maja 2020 w C i C++ przez Stefan Marzec Użytkownik (710 p.)
0 głosów
1 odpowiedź 282 wizyt
0 głosów
1 odpowiedź 424 wizyt
pytanie zadane 29 października 2016 w C i C++ przez thekibi27 Bywalec (2,110 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 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!

...