Vypuštění komentářů
Zadání:
Napište program, který vypustí komentáře ze souboru a výsledek zapíše do jiného souboru.
Komentáře předpokládejte v obou tvarech (tj. „/* */“ i „ // “ ).
Název vstupního i výstupního souboru je předán jako parametr při spuštění programu.
Pro vyhodnocování použijte stavový automat realizovaný za pomoci klíčového slova switch.
Při otevírání souborů otestujte, zda se otevření zdařilo
otevřené soubory zavřete
Nápověda:
příkaz switch realizuje větvení na základě celočíselné proměnné reprezentující akuální stav programu. Celočíselnou proměnnou může být kód stavu, ve kterém se nachází vyhodnocování. Podle aktuálně načteného znaku ze souboru se stav může změnit. Těmito stavy může například být:
TEXT – jsme uprostřed textu, který se kopíruje na výstup (objeví-li se lomítko, je nutno se přepnout do stavu, kdy lze očekávat komentář – lomítko se na výstup nezapíše)
LOMITKO – minulý znak bylo lomítko (podle aktuálního znaku poznáme, zda se jedná o /*, // nebo skutečně o lomítko
C_KOMENT – jsme uvnitř komentáře /*, hvězdička je potencionální konec
HVEZDICKA – je-li aktuálně lomítko, končí komentář, je-li to jiný znak, vracíme se do C_KOMENT
CPP_KOMENT – jsme uvnitř řádkového komentáře – končí koncem řádky (pak je TEXT)
…
(Řeší Váš program situaci, kdy se znak pro komentář objeví v řetězci? Např.:
printf(“Komentář se píše takto: /* tady je komentář */ nebo takto: // tady je \“řádkový\“ komentář “);
Jak byste vyřešili situaci, kdy by se nemělo objevit více prázdných řádků za sebou (např. 10 jednořádkových
komentářů za sebou bez kódu C)
)
Postup:
v nastavení projektu (pravé tlačítko na kořenovém řádku souborů projektu – FileView, potom settings a program arguments) napište názvy vstupního a výstupního souboru. Používejte názvy souborů, které nejsou součástí projektu. Mohlo by dojít ke kolizím při otevírání souborů.
Funkce main by měla mít parametry argc a argv. Vytiskněte je.
Pokuste se otevřít a zavřít vstupní a výstupní soubor. Otestujte, zda se operace povedly. (Otevření proveďte v textovém modu. K otevření použijte funkci fopen, k zavření fclose. Operace se povedla, pokud fopen nevrátí NULL.).
Zkuste soubor pouze překopírovat. (použijte fgetc a fputc. Obě funkce se chovají tak, že se posunou o znak. To je „ znak se pošle do linky a zmizí.“)
Naprogramujte stavový automat.
Poslední změna: 2006-10-10