Stránka 1 z 1

Dotaz k programu v jazyce C

Napsal: ned 2. pro 2007, 18:51
od danny7
Zdravím místní programátory, dostal jsem za úkol udělat prográmek podle tohoto zadání

Sestavte funkci, která zjistí počet písmen, číslic, tabelátorů a nových řádků ve znakovém souboru. Funkci použijte v programu, který bude číst soubor z vnějšího zařízení

Program už víceméně mám (až na tabelátory a nové řádky) ale chtělo by to odladit, program mi počítá pouze první písmena ve slovech a nedaří se mi to upravit, nemam talent na programování a kdybych nemusel ani se ho neučim ale bohužel musím to přetrpět, proto prosím nějakou hodnou duši aby mi poradila v čem je problém, co upravit. Byl bych vám neskutečně vděčný, zde je zdroják



#include <stdio.h>
#include <conio.h>
#include <math.h>
FILE *f;
int main ()
{
int pocet[256],j,hodnota,pismen,slov;
f=fopen("text.txt","r");
if (f==NULL){printf("soubor se neotevrel\n"); getchar();}

j=0;slov=0;
do {
pocet[j]=0;
j++;
} while (j<256);

while ((hodnota!=EOF)&&((hodnota=getc(f))!=EOF)){
pocet[hodnota]++;
if ((hodnota>='a')&&(hodnota<='z')) {
pismen=1;
while (((hodnota=getc(f))!=EOF)&&((hodnota>='a')&&(hodnota<='z'))) {
pismen++;
}
if (pismen>=2) slov++;

}

}

printf ("\n");
printf ("Pocet jednotlivych cislic:\n");
j=0; do { /* vypis cisel */
printf (" %d(%d)",j,pocet[j+'0']);
j++;
} while (j<10); printf ("\n");

printf ("\n");
printf ("Pocet jednotlivych malych pismen:\n");
j=0; do { /* vypis malych pismen */
printf (" %c(%d)",(char)(j+'a'),pocet[j+'a']);
j++;
} while (j<26); printf ("\n");

printf ("\n");
printf ("Slov %d",slov);
getchar();
getchar();
}

Napsal: ned 2. pro 2007, 20:23
od €agle
Jelikoz z toho zadani neni jasne, zda je pozadovan pocet konkretnich jednotlivych pismen (samostatne pocet a, b, c...), nebo zda se chce celkovy pocet pismen, zvolil bych druhou, jednodussi moznost. Program by pak vypadal asi takhle:

Kód: Vybrat vše

int pismena = 0, cisla = 0, taby = 0, radky = 0;
FILE * InFile = fopen("soubor.txt", "r");
char pismeno;
while((pismeno = fgetc(InFile)) != EOF)
{
 if(isalpha(pismeno)) pismena++;
 elseif(isdigit(pismeno)) cisla++;
 elseif(pismeno == '\t') taby++;
 elseif(pismeno == '\n') radky++;
}
fclose(InFile);
Pokud bys to chtel vylozene jako funkci, tak to muzes prepsat a dat za parametr treba nazev souboru...

(psal jsem to rovnou bez vyzkouseni, takze tam mozna bude nejaka chybicka)