私自身、プログラミング経験1週間で入門書を一通り読んだ程度の知識です。
独学でC言語を勉強中ですが、どれだけ調べても理解できませんので解説をお願いしたいです。
以下のプログラムの内容ですが、ソースコードのコメント数と実行数を計算する。
実行行でのコメントは実行行として扱う。
スペース(全角 半角)、改行、タブのみはカウントしない。
となっています。
2回目のwhile文(このwhile文からコメントやら空白数をカウント)が理解できません。
何故、フラグを立てることでコメントかコメントじゃないかを判別できるのでしょうか?
またどの行で空白を求めているのでしょうか?
求めている事は多数ですがよろしくお願い致します。
*掲載のソースコードはテキストの模範解答になります。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFF 1024
int main()
{
FILE *fp;
char fname[256];
char str[BUFF];
int len = 0;
int i = 0;
int all = 0;
int exe = 0;
int come = 0;
int flaga = 0;
int flagb = 0;
int flagc = 0;
while (1) {
printf("ステップ数をカウントします。\n");
printf("ソ\ースファイル名:");
fp = fopen(gets(fname), "r");
if (fp == NULL) {
perror("ファイルが存在しません\n");
continue;
}
while ((fgets(fname, BUFF, fp)) != NULL) { //ここからどような処理をしているのかわかりません。
len = strlen(fname);
for (i = 0; i < len; i++) {
if (isgraph(fname[i])) {
if (fname[i] == '/' && fname[i+1] == '/' && flagb == 0) {
flaga = 1;
}else if (fname[i] == '/' && fname[i+1] == '*' && flaga == 0) {
}else if (fname[i] == '/' && fname[i-1] == '*' && flagb == 1) {
flagb = 0;
}else{
if (flaga == 0 && flagb == 0) {
flagc = 1;
}
}
}
}
for (i = 0; i <len; i++) {
if(isgraph(fname[i])){
all++;
if (flagc == 0) {
come++;
}
break;
}
}
flaga = 0;
flagc = 0;
}
exe = all - come;
printf("実行行:%d行\n", exe);
printf("コメント行:%d行\n", come);
}
fclose(fp);
return 0;
}