This C program counts the number of lines, blank lines, and comments in a given program file. It reads the file line by line and analyzes each line to determine its type.
Problem Statement
You are required to write a C program that reads a program file and counts the number of lines, blank lines, and comments present in the file. The program should perform the following tasks:
- Prompt the user to enter the name of the program file.
- Open the program file for reading.
- Read the file line by line and analyze each line to determine its type:
- If a line is empty (contains no characters), it should be considered a blank line.
- If a line contains a single-line comment (starts with “//”), it should be counted as a comment line.
- If a line contains the start of a multi-line comment (“/*”), it should be counted as a comment line.
- If a line is inside a multi-line comment, it should also be counted as a comment line.
- If a line contains the end of a multi-line comment (“*/”), it should mark the end of the comment.
- After processing all the lines in the file, close the file.
- Display the following information to the user:
- The total number of lines in the program file.
- The number of blank lines found.
- The number of comment lines found.
Ensure that your program handles any errors that may occur, such as being unable to open the file or encountering invalid input.
C Program to Count No of Lines, Blank Lines, and Comments in the Program
#include <stdio.h>
#include <string.h>
int countLines(char program[]) {
FILE *file = fopen(program, "r");
if (file == NULL) {
printf("Unable to open the file.\n");
return -1;
}
char line[200];
int totalLines = 0;
int blankLines = 0;
int commentLines = 0;
int inComment = 0;
while (fgets(line, sizeof(line), file)) {
totalLines++;
// Check for blank line
if (strlen(line) == 1) {
blankLines++;
continue;
}
// Check for comment line
if (inComment) {
commentLines++;
if (strstr(line, "*/") != NULL) {
inComment = 0;
}
continue;
}
if (strstr(line, "//") != NULL) {
commentLines++;
continue;
}
if (strstr(line, "/*") != NULL) {
commentLines++;
inComment = 1;
}
}
fclose(file);
printf("Total lines: %d\n", totalLines);
printf("Blank lines: %d\n", blankLines);
printf("Comment lines: %d\n", commentLines);
return 0;
}
int main() {
char program[100];
printf("Enter the name of the program file: ");
scanf("%s", program);
countLines(program);
return 0;
}
How it Works
- The program includes the necessary header files
stdio.handstring.h. - The
countLinesfunction is defined to perform the counting of lines, blank lines, and comments. It takes the name of the program file as input. - Inside the
countLinesfunction:- It opens the program file using
fopenin read mode and checks if the file exists and can be opened. - It initializes variables to track the total number of lines (
totalLines), blank lines (blankLines), comment lines (commentLines), and a flag to indicate if the program is currently inside a multi-line comment (inComment). - Using a loop, it reads each line from the file using
fgets. - For each line, it performs the following checks:
- If the line is empty (i.e., its length is 1), it increments
blankLinesand continues to the next line. - If the program is inside a multi-line comment (
inCommentis 1), it incrementscommentLinesand checks if the line contains the closing comment tag “*/”. If found, it setsinCommentto 0. - If the line contains a single-line comment (“//”), it increments
commentLinesand continues to the next line. - If the line contains the start of a multi-line comment (“/*”), it increments
commentLinesand setsinCommentto 1. - If none of the above conditions are met, it continues to the next line without incrementing any counts.
- If the line is empty (i.e., its length is 1), it increments
- After processing all lines, it closes the file and displays the counts of total lines, blank lines, and comment lines.
- It opens the program file using
- The
mainfunction:- Declares a character array
programto store the name of the program file. - Prompts the user to enter the name of the program file.
- Reads the input using
scanf. - Calls the
countLinesfunction, passing the name of the program file as an argument.
- Declares a character array
- The program execution ends, and the results are displayed.