I can\'t seem to get it right, tried everything, but..
int commentChars() {
char str[256], fileName[256];
FILE *fp;
int i;
do{
long commentCount=0;
ffl
#include
size_t counter(FILE *fp){
int ch, chn;
size_t count = 0;
enum { none, in_line_comment, in_range_comment, in_string, in_char_constant } status;
#if 0
in_range_comment : /* this */
in_line_comment : //this
in_string : "this"
in_char_constnt : ' '
#endif
status = none;
while(EOF!=(ch=fgetc(fp))){
switch(status){
case in_line_comment :
if(ch == '\n'){
status = none;
}
++count;
continue;
case in_range_comment :
if(ch == '*'){
chn = fgetc(fp);
if(chn == '/'){
status = none;
continue;
}
ungetc(chn, fp);
}
++count;
continue;
case in_string :
if(ch == '\\'){
chn = fgetc(fp);
if(chn == '"'){
continue;
}
ungetc(chn, fp);
} else {
if(ch == '"')
status = none;
}
continue;
case in_char_constant :
if(ch == '\\'){
chn = fgetc(fp);
if(chn == '\''){
continue;
}
ungetc(chn, fp);
} else {
if(ch == '\'')
status = none;
}
continue;
case none :
switch(ch){
case '/':
if('/' == (chn = fgetc(fp))){
status = in_line_comment;
continue;
} else if('*' == chn){
status = in_range_comment;
continue;
} else
ungetc(chn, fp);
break;
case '"':
status = in_string;
break;
case '\'':
status = in_char_constant;
break;
}
}
}
return count;
}
int main(void){
FILE *fp = stdin;
size_t c = counter(fp);
printf("%lu\n", c);
return 0;
}