#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>
int main() {
//clrscr();
FILE *fp;
int c;
int chars = 0, total = 0, multi = 0, single = 0;
enum states { TEXT, SAW_SLASH, SAW_STAR, SINGLE_COMMENT, MULTI_COMMENT } state = TEXT;
fp
= fopen( "comments.txt", "r" );
while ( (c
= fgetc( fp
)) != EOF
){ chars++;
switch( state ){
case TEXT : switch( c ){
case '/' : state = SAW_SLASH; break;
case '\n' : total++; // fall-through
default : break;
}
break;
case SAW_SLASH : switch( c ) {
case '/' : state = SINGLE_COMMENT; break;
case '*' : state = MULTI_COMMENT; break;
case '\n' : total++; // fall through
default : state = TEXT; break;
}
break;
case SAW_STAR : switch( c ) {
case '/' : state = TEXT; multi++; break;
case '*' : break;
case '\n' : total++; //multi++; // fall through
default : state = MULTI_COMMENT; break;
}
break;
case SINGLE_COMMENT : switch( c ) {
case '\n' : state = TEXT; total++; single++; // fall through
default : break;
}
break;
case MULTI_COMMENT : switch( c ) {
case '*' : state = SAW_STAR; break;
case '\n' : total++; //multi++; // fall through
default : break;
}
break;
default: // NOT REACHABLE
break;
}
}
printf( "Total lines : %8u\n", total
); printf( "Single-comment lines : %8u\n", single
); printf( "Multi-comment lines : %8u\n", multi
); //getch();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KLy8jaW5jbHVkZSA8Y29uaW8uaD4KaW50IG1haW4oKSB7CiAgLy9jbHJzY3IoKTsKICBGSUxFICpmcDsKICBpbnQgYzsKICBpbnQgY2hhcnMgID0gMCwgdG90YWwgID0gMCwgbXVsdGkgID0gMCwgc2luZ2xlID0gMDsKCiAgZW51bSBzdGF0ZXMgeyBURVhULCBTQVdfU0xBU0gsIFNBV19TVEFSLCBTSU5HTEVfQ09NTUVOVCwgTVVMVElfQ09NTUVOVCB9IHN0YXRlID0gVEVYVDsKCiAgZnAgPSBmb3BlbiggImNvbW1lbnRzLnR4dCIsICJyIiApOwogIAogIHdoaWxlICggKGMgPSBmZ2V0YyggZnAgKSkgIT0gRU9GICl7CiAgICBjaGFycysrOwogICAgc3dpdGNoKCBzdGF0ZSApewogICAgICBjYXNlIFRFWFQgOiBzd2l0Y2goIGMgKXsKICAgICAgICAgIGNhc2UgJy8nICA6IHN0YXRlID0gU0FXX1NMQVNIOyBicmVhazsKICAgICAgICAgIGNhc2UgJ1xuJyA6IHRvdGFsKys7IC8vIGZhbGwtdGhyb3VnaAogICAgICAgICAgZGVmYXVsdCAgIDogYnJlYWs7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBTQVdfU0xBU0ggOiBzd2l0Y2goIGMgKSB7CiAgICAgICAgICBjYXNlICcvJyAgOiBzdGF0ZSA9IFNJTkdMRV9DT01NRU5UOyBicmVhazsKICAgICAgICAgIGNhc2UgJyonICA6IHN0YXRlID0gTVVMVElfQ09NTUVOVDsgYnJlYWs7CiAgICAgICAgICBjYXNlICdcbicgOiB0b3RhbCsrOyAvLyBmYWxsIHRocm91Z2gKICAgICAgICAgIGRlZmF1bHQgICA6IHN0YXRlID0gVEVYVDsgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBTQVdfU1RBUiA6IHN3aXRjaCggYyApIHsKICAgICAgICAgIGNhc2UgJy8nICA6IHN0YXRlID0gVEVYVDsgbXVsdGkrKzsgYnJlYWs7CiAgICAgICAgICBjYXNlICcqJyAgOiBicmVhazsKICAgICAgICAgIGNhc2UgJ1xuJyA6IHRvdGFsKys7IC8vbXVsdGkrKzsgLy8gZmFsbCB0aHJvdWdoCiAgICAgICAgICBkZWZhdWx0ICAgOiBzdGF0ZSA9IE1VTFRJX0NPTU1FTlQ7IGJyZWFrOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgU0lOR0xFX0NPTU1FTlQgOiBzd2l0Y2goIGMgKSB7CiAgICAgICAgICBjYXNlICdcbicgOiBzdGF0ZSA9IFRFWFQ7IHRvdGFsKys7IHNpbmdsZSsrOyAvLyBmYWxsIHRocm91Z2gKICAgICAgICAgIGRlZmF1bHQgICA6IGJyZWFrOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgTVVMVElfQ09NTUVOVCA6IHN3aXRjaCggYyApIHsKICAgICAgICAgIGNhc2UgJyonICA6IHN0YXRlID0gU0FXX1NUQVI7IGJyZWFrOwogICAgICAgICAgY2FzZSAnXG4nIDogdG90YWwrKzsgLy9tdWx0aSsrOyAvLyBmYWxsIHRocm91Z2gKICAgICAgICAgIGRlZmF1bHQgICA6IGJyZWFrOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGRlZmF1bHQ6IC8vIE5PVCBSRUFDSEFCTEUKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIGZjbG9zZShmcCk7CiAgcHJpbnRmKCAiVG90YWwgbGluZXMgICAgICAgICAgOiAlOHVcbiIsIHRvdGFsICk7CiAgcHJpbnRmKCAiU2luZ2xlLWNvbW1lbnQgbGluZXMgOiAlOHVcbiIsIHNpbmdsZSApOwogIHByaW50ZiggIk11bHRpLWNvbW1lbnQgbGluZXMgIDogJTh1XG4iLCBtdWx0aSApOwogIC8vZ2V0Y2goKTsKICByZXR1cm4gMDsKfQ==