/* Program doplnuj v 0.8 vylepseni: po stisknuti enteru by se kurzor presunul na konec vypsaneho slova a pak by pokracovalo dalsi psani */ #include int main(int argc, char *argv[]) { char slovo[256], slovod[256]; // slovo - slovo nacitane z klavesnice - maximalne 256 znaku // slovod - slovo nacitane ze souboru - maximalne 256 znaku int i, pozice, x, y, exists; // exists - boolean zda existuje dosud napsane slovo v souboru FILE *in; if (argc != 2) { // kontrola poctu argumentu printf("Program spuste takto:\n\tdoplnuj.exe [vstupni soubor]\n"); return 0; } if ((in = fopen(argv[1], "rt")) == NULL) { // kontrola otevreni souboru printf("Nepodarilo se otevrit vstupni soubor: %s\n", argv[1]); return 0; } clrscr(); printf("program ukoncite napsanim 'exit'\nstisknete enter pro napsani dalsiho slova\n"); slovo[0] = '\0'; // v pameti muze byt bordel while (strcmp(slovo, "exit") != 0) { // porovnani na ukonceni programu pozice = 0; exists = 1; if (fgets(slovod, 256, in) == NULL) { // nacti prvni slovo ze souboru - chyba (coz znaci prazdny soubor) ukonci cely program printf("soubor je prazdny\n"); return 0; } while ((slovo[pozice] = getche()) != '\r') { // getche() nacte jeden znak a tim konci // kontroluj, zda zadany znak neni enter a nacti ho do stringu slovo if (slovod[pozice] != slovo[pozice]) // v okamziku, kdy se nacitane pismenko na pozici neshoduje s pismenkem v nactemen slove ... for (i = 0; i <= pozice; i ++) // projdi vsechny pismenka ve slove a ve sloved a porovnej je ... if (slovod[i] != slovo[i]) { // kdyz se lisi ... if (fgets(slovod, 256, in) == NULL) {exists = 0;break;} // nacti dalsi slovod ze souboru, pokud je konec souboru, // znaci to, ze pozadovane slovo v nem nebylo // fgets nacte maximalne 256 znaku - zbytku radky si nevsima i = -1; // vrat se na zacatek obou slov continue; // spust znovu kontrolu slov - neni potreba, jsme na konci cyklu, ale continue ve FORu by mohlo preskocit zvetsovani cisla o jednicku - coz borlad nedela } if (i == pozice+1) exists = 1; // jestlize i dorazilo az na konec slova, znaci to ze slovo bylo nalezeno if (exists) { // jesltize slovo bylo nalezeno, pak ... x = wherex(); y = wherey(); gotoxy(x-pozice-1, y); // jdi vlevo o tolik policek kolik bylo zatim ve slove napsano znaku printf("%s", slovod); // nalezene slovo cele vypis gotoxy(x, y); // vrat se tam, kde byl predtim kurzor } pozice ++; if (pozice >= 256) { // muze se stat, ze uzivatel zada prilis dlouhe slovo printf("\nprilis dlouhe slovo\n"); break; } } printf("\n"); // pro prehlednost se posun o radek niz slovo[pozice] = 0; // ukonci uzivatelem napsane slovo fseek(in, 0, SEEK_SET); // presun se na zacatek souboru } fclose(in); // uzavri soubor return 1; }