Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- /* Program vymaze komentare zo zdrojoveho kodu jazyka C */
- int main(void) {
- int c, buffer;
- while ((c = getchar()) != EOF) { /* cyklus sa zastavi len na EOF */
- if (c == '/') { /* sme prve lomitko z mozneho zaciatku komentu? */
- buffer = c; /* nacitany znak si ulozime do bufferu */
- if ((c = getchar()) == EOF) /* nacitame dalsi znak, bol to EOF? */
- break; /* bol, tak vyskocime z cyklu "while ((c = getchar()) != EOF) {" */
- else if (c == '/') { /* bolo to druhe lomitko, takze mame "//"? */
- while ((c = getchar()) != EOF) /* sme "//", cyklus pojde, kym nenacitame EOF */
- if (c == '\\') { /* nacitali sme backslash, rusime vyznam pripadneho nasledneho '\n'? */
- c = getchar(); /* nacitame dalsi znak, nebudeme ho potrebovat nech je cokolvek, okrem EOF */
- if (c == EOF) /* nacitali sme EOF? */
- break; /* vyskocime z "while ((c = getchar()) != EOF)" */
- }
- else if (c == '\n') /* sme '\n' bez predchadzajuceho '\'? */
- break; /* ano, takze sme von z komentara, tak vyskocme z "while ((c = getchar()) != EOF)" */
- if (c == EOF) /* skoncil cyklus pre nacitany EOF? */
- break; /* ano, tak vyskocme z "while ((c = getchar()) != EOF) {" */
- else
- putchar('\n'); /* skoncili sme komentar "//" cez znak '\n', tak ho aj vytlacme */
- }
- else if (c == '*') { /* bol to znak '*', takze sme "/*"? */
- while ((c = getchar()) != EOF) { /* sme "/*", cyklus pojde, kym nenacitame EOF */
- if (c == '*') { /* sme '*', mozny zaciatok konca komentara "*\/"? */
- while (c == '*') /* kym mame nacitany znak '*' ako mozny koniec "*\/" */
- c = getchar(); /* nacitavajme stale dalsi znak */
- if (c == EOF || c == '/') /* sme EOF, alebo naozaj koniec komentara '/' po '*'? */
- break; /* ano, tak vyskocime z "while ((c = getchar()) != EOF) {" */
- }
- }
- if (c == EOF) /* vyskocili sme z "while ((c = getchar()) != EOF) {" pre EOF? */
- break; /* ano, tak vyskocme z "while ((c = getchar()) != EOF) {" */
- }
- else { /* zaciatok komentara nenastal */
- putchar(buffer); /* vytlacme odlozeny znak z buffera */
- putchar(c); /* a vytlacime aj znak nacitany po nom */
- }
- }
- else { /* sme len obycajny znak */
- putchar(c); /* tak ho vytlacime */
- if (c == '\'') { /* bude nasledovat znak po '\''? */
- c = getchar (); /* ano, tak nacitame dalsi znak */
- if (c == EOF) /* ak sme nacitali EOF */
- break; /* vyskocime z "while ((c = getchar()) != EOF) {" */
- else /* sme cokolvek okrem EOF */
- putchar(c); /* tak vypiseme dany znak */
- }
- else if (c == '"') { /* sme zaciatok '"', takze vo mne nemoze zacat koment? */
- while ((c = getchar()) != EOF) { /* sme, tak zacnime cyklus do nacitania EOF */
- putchar(c); /* vytlacme, co sme dostali, nech uz je to cokolvek */
- if (c == '\\') { /* sme backslash, rusime vyznam pripadneho nasledneho '"'? */
- c = getchar(); /* nacitame dalsi znak */
- if (c == EOF) /* sme EOF? */
- break; /* tak vyskocme z "while ((c = getchar()) != EOF) {" */
- else /* boli sme cokolvek ine ako EOF */
- putchar(c); /* kedze znak pred nami bol '\', tak toto vytlacime nech to je cokolvek */
- }
- else if (c == '"') /* nacitali sme '"' bez predchadzajuceho '\'? */
- break; /* ano, tak vyskocme z "while ((c = getchar()) != EOF) {" */
- }
- }
- }
- if (c == EOF) /* nacitali sme niekde vo vnutri EOF? */
- break; /* ano, tak vyskocme z "while ((c = getchar()) != EOF) {" */
- }
- return 0; /* slusne sa rozlucime */
- }
Add Comment
Please, Sign In to add comment