Scanf

0

Witam,
mam do napisania program liczący średnią liczb.
Wejście:

  • Pierwszą liczbą jest ilość liczb
  • Następnie są wczytywane liczby z których wyliczamy średnią.
    Jeśli podamy za mało liczb niż wcześniej zadeklarowaliśmy program ma wziąć te liczby i wyliczyć z nich średnią. Właśnie z tym mam problem. Gdy wczytuje liczby, pętla się nie kończy dopóki nie podam tyle liczb ile wcześniej zadeklarowałem.

    
    #include <stdio.h>
    
    int main() {
      int ilosc;
      int tab[10];
      scanf("%d",&ilosc);
      for(int i=0;i<ilosc;i++)
      {
          scanf("%d",&tab[i]);
      }
    
      double doda=0;
      for(int i=0;i<ilosc;i++)
      {
          doda+=tab[i];
      }
      double srednia=doda/ilosc;
      printf("avarage = %g",srednia);
    
      return (0);
    }
0

Jak wygląda treść zadania? Nie ma to zbytniego sensu żeby podawać liczbę liczb a potem ją ignorować

0

Państwa zadaniem jest napisanie programu, który wczyta pewną ilość liczb, następnie wyświetli z nich średnią (zmiennoprzecinkową w najkrótszej formie), a potem wyświetli wszystkie wczytane liczby nieparzyste (z zachowaniem kolejności). Pierwszą liczbą jest ilość liczb, ale bez obaw, wczytanych liczb będzie tyle, że ich rozmiar nie przekroczy rozmiaru 1Mb.

  1. Proszę uwzględnić, że wczytano mniej liczb niż zapowiedziano (proszę sprawdzić co zwraca scanf() w razie niepowodzenia).
  2. Proszę w razie wczytania 0 lub mniej liczb aby średnia była 0.
  3. Proszę uwzględnić, że wczytano więcej liczb niż zadeklarowano i po prostu zignorować nadmiarowe liczby
    Uczelniana sprawdzarka na wejście daje np takie liczby: 6 5 4
0

To w takim razie pierwsza pętla nie jest właściwego rodzaju.
Skoro nie możesz mieć pewności jakiej wielkości jest zbiór, który wczytujesz, to powinien być tam "while" z warunkiem "or" na znak nowej linii, zakładając, że podanie litery nie ma przerwać inputu na amen (a ta sytuacja też musi zostać obsłużona, to swoją drogą), oraz oczywiście "ilość", którą podaję użytkownik.

Dodatkowo, zwróć uwagę, że jeśli ktoś poda "0" jako ilość, to będziesz miał albo UB albo wypsypkę programu (nie pamiętam jak się C zachowywał w tej sytuacji). To też warto obsłużyć osobno, i lepiej nawet to zrobić na początku, bo unikasz niepotrzebnych operacji, które powinny zostać pominięte w takiej sytuacji.

1

Przede wszystkim, nie ma potrzeby aby trzymać wczytane liczby w tablicy.

Wczytuj liczby tak długo jak liczba liczb jest mniejsza niż zadana oraz udało się wczytać liczbę. Potem wypisz ich średnią.

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