Kolejne zadanko z serii ANSI C
**Użytkownik wprowadza pewien napis (linię znaków) składającą się z jednostek rozdzielonych przecinkiem (,) lub średnikiem (;). Niektóre z tych jednostek są liczbami całkowitymi. Napisz program, który odczyta wprowadzoną linię, znajdzie w niej liczby całkowite i wypisze ich liczbę oraz średnią arytmetyczną (średnia oczywiście nie musi być liczbą całkowitą).
W rozwiązaniu wykorzystaj funkcje z bibliteki string i funkcję atoi. Zwróć uwagę na elegancję i zwięzłość kodu.**
Mój problem, napisałem kod działa dla większości przypadków np:
33, 7go, 22, abc
lub
33; asc ; 67, d7,0
**ale problem pojawia się tu: **
np. gdy wprowadzę samą spację, albo np " - 5" minus spacja liczba, a program musi tolerować spację przed liczbą albo minus
Poniżej wstawiam swój kod:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int sprawdz(char schowek[])
{
unsigned long i;
int j;
i=strlen(schowek);
j=0;
while(j<i)
{
if((schowek[j]>'9')&&(schowek[j]!='-')&&(schowek[j]!=' '))
{
return 1;
}
j++;
}
return 2;
}
int main()
{
char napis[1000];
char * schowek;
int liczba;
float srednia;
int licznik = 0;
float suma = 0;
char korektor[3] = ",;";
gets(napis);
schowek = strtok(napis, korektor);
while( schowek != NULL)
{
if(sprawdz(schowek)==2)
{
liczba=atoi(schowek);
licznik++;
suma +=liczba;
}
schowek = strtok(NULL, korektor);
}
if(licznik!=0)
{
srednia = suma/ licznik;
printf("\nŚrednia :%.2f\nIlość liczb całkowitych: %d \n", srednia, licznik);
}
else
{
printf("Brak liczb całkowitych \n");
}
return 0;
}