Prosil bych o radu:
Vůbec nechápu proč to nefunguje.
Sestavil jsem si takový prográmek, který mi rozháže slova v textu tak, že dá každé slovo na nový řádek. Koncipoval jsem program pro německá slova, podst. jména mají členy der/die/das. Mělo by to fungovat tak, že pokud je tam člen mělo by být slovo i se členem na jednom řádku.
Posílám tedy kód programu - mužský rod funguje (der), ten jsem pro zjednodušení problematiky vymazal, ten mi funguje.
Střední rod funguje (das), je zde obsažen.
Ženký rod mi nefunguje (die) a nevím proč.
Popis programu:
Program načítá znaky - řádka : while((zn=getc(sb)) != EOF)
Pokud je zn == nejaký znak - vytiskne ten znak
Pokud je zn == ' ' (mezera) a zároveň pokud je MEZERA == NE, pak odskočí na nový řádek
MEZERA = ANO je tehdy pokud se jedná o mezeru mezi členem a podst. jménem. Pak program udělá pouze mezeru a neodskakuje.
Tato MEZERA = ANO je definována jako:
- program projde prvním cyklem while a někde dole je podmínka if(zn=='d') prvni = zn; pokud je splněna, program si pamatuje "d"
- ve druhem cyklu narazí na podmínku if(prvni=='d' && (zn=='e' || zn=='i' || zn=='a')) druhy = zn; - pokud je splněna pamatuje si např. "a"
- ve třetím cyklu narazí na podmínku if(prvni=='d' && druhy=='a' && zn=='s') treti = zn; - pokud je splněna pamatuje si "s" - jedná se o střední rod, je to tedy člen a MEZERA = ANO.
Je zajímavé, že je zde úplně stejná podmínka pro die a to nefunguje, princip je úplně stejný. Jestli víte proč, budu rád
Ještě přikládám obsah souboru slovicka.txt, které program vyžaduje:
lehrnen das Buch lehrnen
das Auto
die Schule
das Auto
Pokud to uložíte do txt. souboru a spustíte, zjistíte že das Auto napíše na jednu řádku a die Schule ne ???
Díky
#include<stdio.h>
#include <string.h>
main() // Pocitani slov, radek a znaku v souboru 1_11.txt
{
typedef int BOOL;
const BOOL ANO = 1,NE = 0; // Definice logickych konstant
BOOL mezera; // Zajistuje aby mezera mezi 2 sloupci
// byla nacitana pouze 1x
FILE *sb=fopen("slovicka.txt","r"); // Otevreni souboru 1_11.txt
int rd ,sl; // rd - radek, sl - sloupec, zn - znak
char zn, prvni, druhy, treti;
mezera = NE;
while((zn=getc(sb)) != EOF) // dokud neskonci soubor, nacita znaky
{
if(prvni=='d' && druhy=='a' && zn=='s') // -- podminka pro 3. znak --
treti = zn; // stredni rod
if(prvni=='d' && druhy=='i' && zn=='e') // -- podminka pro 3. znak --
treti = zn; // zensky rod - nefunguje ??
if(prvni=='d' && (zn=='e' || zn=='i' || zn=='a'))
druhy = zn; // -- podminka pro 2. znak --
if(zn==' '){ // pise mezeru pokud je splnena podm s/z rodu.
if (prvni=='d' && druhy=='a' && treti=='s') mezera = ANO;
if (prvni=='d' && druhy=='i' && treti=='e') mezera = ANO;
if (mezera == ANO){
printf(" ");
prvni = ' ';
druhy = ' ';
treti = ' ';
mezera = NE;
}
else { // pokud mezera mezi slovy, skoci na novy radek
printf("\n");
}
}
else
printf("%c", zn);
if(zn=='d')
prvni = zn; // -- podminka pro 1. znak --
}
fclose(sb);
if ((sb = fopen("slovicka.txt", "r")) == NULL) {
fprintf(stderr, "Chyba cteni souboru %s\n", "1_11.txt");
}
}