Nie działający warunek w pętli

0

Witam,
Mam problem, wyjaśnię na przykładzie.

  1. Włączam program.
  2. Podaje, że chce 5 liczb.
  3. Podaje liczby 1, 2, 3, 4, 5.
  4. Pytanie dlaczego mój program podaje, że w tablicy jest 5 elementów zerowych skoro nigdzie nie podałem zero, to powinien wyświetlić ilość elementów zerowych = 0. Jak to naprawić ?
 
		//Liczymy ile jest elementow zerowych
		for(i=0; i<rozmiar; i++)
		{
			if(tab[i] == 0);
			{
				ile++;
			}
		}


 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main()
{
	int tab[100];
	int rozmiar;
	int i = 0;
	int suma = 0;
	float srednia = 0;
	int ile = 0;

	printf("Nie wiecej niz 100! Podaj ile elementow ma miec tablica: ");
	scanf("%d", &rozmiar);
	if(rozmiar !=0 && rozmiar <100)
	{
		do
		{
			printf("Podaj %d element tablicy: ", i+1);
			scanf("%d", &tab[i]);
			i++;
		}while(i != rozmiar);

		printf("\nLiczby w twojej tablicy to: ");
		for(i=0; i<rozmiar; i++)
			printf("%d ", tab[i]);

		//Liczymy ile jest elementow zerowych
		for(i=0; i<rozmiar; i++)
		{
			if(tab[i] == 0);
			{
				ile++;
			}
		}

		printf("\n W tablicy jest zerowych elementow: %d", ile);
		//Suma
		for(i=0; i<rozmiar; i++)
		{
			if(tab[i] != 0);
			{
				suma += tab[i];
			}
		}
		//Średnia niezerowych
		if(rozmiar - ile != 0)
		{
			srednia = suma/(rozmiar - ile);
			printf("Srednia niezerowych elementow: %.2f", srednia);
		}

	}
	else
		printf("Nieprawidlowy rozmiar!");


	//************************************************
	printf("\n");

	printf("\n");
	system("PAUSE");
	return 0;
}

0
  1. rozmiar !=0 słaby warunek bo uzywasz signed integer, więc lepiej sprawdzić czy > 0...
  2. i != rozmiar kolejny słaby warunek, lepiej pętlić dopóki jest < i
  3. nie mam pod ręką debuggera a priorytetu nie pamiętam, ale dla pewności dałbym &(tab[i]) w scanfie
0

Poprawiłem wg Twoich wskazówek, ale niestety dalej to samo.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main()
{
	int tab[100];
	int rozmiar;
	int i = 0;
	int suma = 0;
	float srednia = 0;
	int ile = 0;

	printf("Nie wiecej niz 100! Podaj ile elementow ma miec tablica: ");
	scanf("%d", &rozmiar);
	if(rozmiar > 0 && rozmiar <100)
	{
		do
		{
			printf("Podaj %d element tablicy: ", i+1);
			scanf("%d", &(tab[i]));
			i++;
		}while(i < rozmiar);

		printf("\nLiczby w twojej tablicy to: ");
		for(i=0; i<rozmiar; i++)
			printf("%d ", tab[i]);

		//Liczymy ile jest elementow zerowych
		for(i=0; i<rozmiar; i++)
		{
			if(tab[i] == 0);
			{
				ile++;
			}
		}

		printf("\n W tablicy jest zerowych elementow: %d", ile);
		//Suma
		for(i=0; i<rozmiar; i++)
		{
			if(tab[i] != 0);
			{
				suma += tab[i];
			}
		}
		//Średnia niezerowych
		if(rozmiar - ile != 0)
		{
			srednia = suma/(rozmiar - ile);
			printf("Srednia niezerowych elementow: %.2f", srednia);
		}

	}
	else
		printf("Nieprawidlowy rozmiar!");


	//************************************************
	printf("\n");

	printf("\n");
	system("PAUSE");
	return 0;
}
 
1

if(tab[i] == 0); // ten if zawiera tylko i wyłącznie średnik czyli operacje pustą.

0
_13th_Dragon napisał(a):

if(tab[i] == 0); // ten if zawiera tylko i wyłącznie średnik czyli operacje pustą.

A zaraz potem instrukcja wykonująca się zawsze:

{
   ile++;
}

Dlatego zliczy wszystkie elementy w tablicy

CASE SOLVED ;)

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