Przerwanie wpisywania do tablicy.

0

Witam, mam taki problem, a mianowicie co zrobić, aby mój program sumował liczby wpisane do tablicy, ale, kiedy wpiszę zero zatrzymał się i zsumował te liczby, które zostały wpisane aż do momentu wpisania zera. Wszystko niby dobrze, tylko program wpisuje mi po przerwaniu jakieś śmieci i je później też sumuje, byc może tak ma być, ale jak to zrobić, żeby dodawał tylko te wpisane??

#include<stdio.h>

main()
{
    int i, tab[10], suma=0;
    printf("Podaj liczby:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d", &tab[i]);
        if(tab[i]==0)break;
    }
        for(i=0;i<10;i++)
    {
    printf("indeks tablicy [%d]=%d\n", i, tab[i]);
    suma+=tab[i];
    printf("%d", suma);
    }

    return 0;
}
1

No chyba wypadałoby zapisać do osobnej zmiennej, ile liczb wczytałeś, nie sądzisz?

0

Szczerze mówiąc, to jestem na poziomie bardzo początkowym, dlatego też proszę o pomoc, przecież to ode mnie zależy kiedy ja wpiszę "0" czyli ode mnie też zależy ile indeksów tablicy wypełnię.

0

No i co z tego? Umiejętności programowania nie mają tutaj nic do rzeczy - pomyśl na logikę.
Masz pętlę:

for(i=0;i<10;i++)
    {
        scanf("%d", &tab[i]);
        if(tab[i]==0)break;
    }

Zakładam, że to Ty napisałeś i rozumiesz każdy jej fragment, zatem: jak, tworząc dodatkową zmienną w programie (przed tą pętlą, nie wewnątrz niej - nazwijmy tę zmienną count, typu int), chciałbyś zliczać wpisane liczby?

0

Najpierw ją dodam do programu poza pętlą, i od razu ją wyzeruję tak jak w tym co napisałem, dalej tym samym sposobem

count=count+tab[i]

? Jak inaczej?

0

Na początek to chcesz znać ilość tych liczb, a nie ich sumę, więc na pewno nie +tab[i].

1
     for(i=0;i<10;i++)
    {
        printf("indeks tablicy [%d]=%d\n", i, tab[i]);
        suma+=tab[i];

Sumujesz zawsze 10 liczb w tej tablicy, nieważne ile wczytałeś. A że nie zawsze wczytałeś wszystkie 10, to dostajesz śmieci.

1

@radi0071 - skoro pętla ma być dynamicznie przerywana, to lepszym rozwiązaniem będzie skorzystanie z pętli do while; Automatycznie ilością wprowadzonych liczb będzie licznik pętli, który będziesz mógł wykorzystać w następnej pętli sumującej podane liczby;

Poniżej rozwiązanie w Pascalu - w C++ spróbuj napisać sam:

var
  arrNumbers: array [0 .. 9] of Integer;
  intCounter: Integer = 0;
  intSum: Integer = 0;
  intNumber: Integer;
begin
  repeat
    ReadLn(intNumber);
    arrNumbers[intCounter] := intNumber;
    Inc(intCounter);
  until intNumber = 0;
//until (intNumber = 0) or (intCounter > 9); - blokada wykroczenia poza zakres tablicy

  repeat
    Dec(intCounter);
    Inc(intSum, arrNumbers[intCounter]);
  until intCounter = 0;

  WriteLn('Sum: ', intSum);
  ReadLn;
end.

Macierz będzie "zero-terminated"; Dodatkowo, możesz zabezpieczyć program przed wprowadzeniem zbyt dużej ilości liczb (w podanym kodzie to zakomentowany warunek).

0

Dobra po przerobieniu działa, wrzuciłem sumowanie pod break i poszło, mam nadzieję, że nie jest to zły pomysł.

#include<stdio.h>

main()
{
    int i, tab[10], suma=0;
    printf("Podaj liczby:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d", &tab[i]);
        if(tab[i]==0)break;
        suma+=tab[i];
    }
        for(i=0;i<10;i++)
    {
    printf("indeks tablicy [%d]=%d\n", i, tab[i]);

    printf("%d", suma);
    }

    return 0;
}
0

Programowanie przez permutacje to zła technika...
Poza tym w dalszym ciągu źle masz wypisywane wartości w drugiej pętli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0