nefunkcna fcia (C)

Sekcia: Programovanie 27.11.2007 | 17:48
Avatar Ondrej Danko Debian | Fedora  Používateľ
Caute...mam problem, ze vo fcii uloz neni pole pristupne a neviem preco..
pritom su vsetky fcie takmer identicke (co sa tyka parametrov)

zdrojovy kod programu:

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

#define DLZKA 20
#define POCET 30
#define SUBOR "znamky.txt"

void nacitaj(float **znamky, char meno[], int *pocet, float *sucet);
void uloz(float **znamky, char meno[], int pocet);
void vypis(float **znamky, char meno[], int pocet, float sucet);

int main(void) {
// deklarovanie premennych
struct predmet {
float *znamky;
char meno[DLZKA];
int pocet;
float sucet;
} sjl, mat;

// nazvy predmetov
strcpy(sjl.meno, "Slovencina");
strcpy(mat.meno, "Matematika");

// nacitanie znamok
nacitaj(&sjl.znamky, sjl.meno, &sjl.pocet, &sjl.sucet);
nacitaj(&mat.znamky, mat.meno, &mat.pocet, &mat.sucet);

// ulozenie znamok
uloz(&sjl.znamky, sjl.meno, sjl.pocet);
uloz(&mat.znamky, mat.meno, mat.pocet);

// vypisanie znamok
vypis(&sjl.znamky, sjl.meno, sjl.pocet, sjl.sucet);
vypis(&mat.znamky, mat.meno, mat.pocet, mat.sucet);

// uvolnenie pamete
free(sjl.znamky);
free(mat.znamky);

return 0;
}

void nacitaj(float **znamky, char meno[], int *pocet, float *sucet) {
if ((*znamky = malloc(POCET * sizeof(float))) == NULL) {
printf("Chyba pri pridelovani pameti!\n");
exit(1);
}

float pom;
int i = 0;
*sucet = 0;

printf("\n%s\n", meno);
printf("Zadajte, prosim vase znamky:\n");
while (scanf("%f", &pom) == 1) {
if (pom >= 1 && pom <= 5) {
*sucet += pom;
(*znamky)[i++] = pom;
if (i % POCET)
if ((*znamky = realloc(*znamky, (POCET + i) * sizeof(float))) == NULL) {
printf("Chyba pri pridelovani pameti!\n");
exit(1);
}
} else {
printf("Cislo %3.2f neni znamka!\n", pom);
}
}

*pocet = i;
return;
}

// funkcia je este nedorobena..ale mala by byt funkcna
void uloz(float **znamky, char meno[], int pocet) {
FILE *f;
int i;

if ((f = fopen(SUBOR, "a")) == NULL) {
printf("Chyba pri otvarani suboru!\n");
exit(1);
}

for (i = 0; i < pocet; i++) {
fprintf(f, "%d\n", (*znamky)[i]);
}

if (fclose(f) == EOF)
printf("Chyba pri zatvarani suboru!\n");

return;
}

void vypis(float **znamky, char meno[], int pocet, float sucet) {
int i;

printf("\n%s", meno);
printf("\nVypisanie znamok, pocet=%d:\n", pocet);
for (i = 0; i < pocet; i++) {
printf("%3.2f\n", (*znamky)[i]);
}
printf("Vas priemer je %3.2f.\n", sucet / pocet);

return;
}
    • Re: nefunkcna fcia (C) 27.11.2007 | 22:18
      Avatar Ondrej Danko Debian | Fedora  Používateľ
      sorry za otravovanie.....totalne primitivna chyba: tj pouzitie %d namiesto %f :D

      PS: najlahsie chyby sa hladaju najtazsie ;)