#6 TheOndrap
Nelze než souhlasit. Konkrétně jazyk C je kvůli jeho záludnosti třeba poznávat pomalu a podrobně, nikoli jednotlivé kapitoly uspěchat a snažit se stavět na hliněných nohách. Pro úplného začátečníka by byl vhodnější jiný jazyk (Python, PHP, JavaScript, C#), kde je možné klást větší důraz na samotnou algoritmizaci, netrávit spoustu času nad základními kameny a "někam se dopracovat". Jak široká problematika se v C týká třeba textu - formátovací řetězce, ukončovací znak, ukazatele, správa paměti...
Jen tak pro představu, možná produkční podoba daného programu s ošetřením výjimek (za naprostou bezchybnost stejně neručím, jelikož jsem jen trochu pokročilejší student než autor vlákna) :) :
#include <stdio.h>
#define SOUBOR_FR "hmotnost.txt"
#define SOUBOR_FW "vysledek.txt"
#define NORMA 100.0
#define TOLERANCE 1
int main()
{
int
main_return = 0, /* návratová hodnota fce main */
pocet_spravne = 0,
pocet_hodnot = 0;
double
nactena_hodnota = 0;
FILE
*fr, /* soubor pro čtení hodnot */
*fw; /* soubor pro zápis výsledku */
fr = fw = NULL;
/* otevření souborů */
if ((fr = fopen(SOUBOR_FR, "r")) == NULL) {
fprintf(stderr, "Nepodařilo se otevřít soubor \"%s\".\n",
SOUBOR_FR);
return 1;
}
if ((fw = fopen(SOUBOR_FW, "w")) == NULL) {
fprintf(stderr, "Nepodařilo se otevřít soubor \"%s\".\n",
SOUBOR_FW);
if (fclose(fr) == EOF)
fprintf(stderr, "Nepodařilo se uzavřít soubor \"%s\".\n",
SOUBOR_FR);
return 1;
}
/* počítání správných kusů */
while (feof(fr) == 0) {
if (fscanf(fr, " %lf g\n", &nactena_hodnota) == 1) {
pocet_hodnot++;
if (nactena_hodnota >= NORMA - TOLERANCE
&& nactena_hodnota <= NORMA + TOLERANCE) {
pocet_spravne++;
}
}
else
fprintf(stderr, "Chyba při čtení hodnoty...\n");
}
/* zápis výsledku do souboru */
if (fprintf(fw, "%d\n", pocet_hodnot - pocet_spravne) < 0)
fprintf(stderr, "Nepodařilo se zapsat výsledek do souboru \"%s\".\n",
SOUBOR_FW);
/* uzavření souborů */
if (fclose(fr) == EOF) {
fprintf(stderr, "Nepodařilo se uzavřít soubor \"%s\".\n",
SOUBOR_FR);
main_return = 1;
}
if (fclose(fw) == EOF) {
fprintf(stderr, "Nepodařilo se uzavřít soubor \"%s\".\n",
SOUBOR_FW);
main_return = 1;
}
return main_return;
}