105 lines
2.3 KiB
C
Executable File
105 lines
2.3 KiB
C
Executable File
/*
|
|
In this task, you should get familiar with file I/O operations in C
|
|
by writing a program that reads the text file sentences.txt and counts
|
|
both the number of words and the number of characters (excluding line breaks).
|
|
|
|
Tasks:
|
|
- Open "sentences.txt" using fopen.
|
|
- if open fails (i.e., fopen returns NULL):
|
|
- Print the error message "Could not open file\n"
|
|
- return 1
|
|
- User Input: line number that should be analyzed
|
|
- Line numbers are 1-based (if user enters "1", analyze first line)
|
|
- Read file (e.g., using fgetc)
|
|
- analyze correct line
|
|
- Count words separated by whitespace.
|
|
- Count characters (excluding line break).
|
|
- Close file properly after processing.
|
|
- Print word count and character count according to example output below.
|
|
- If entered line number is not in range line numbers of file:
|
|
- print "Could not analyze line\n".
|
|
|
|
Examples:
|
|
|
|
Line number to analyze: 5
|
|
Word Count: 4
|
|
Character Count: 22
|
|
|
|
Line number to analyze: 1
|
|
Word Count: 12
|
|
Character Count: 80
|
|
|
|
Line number to analyze: 22
|
|
Word Count: 14
|
|
Character Count: 76
|
|
*/
|
|
|
|
#include <ctype.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
int main(void)
|
|
{
|
|
printf("Line number to analyze: ");
|
|
int line_number;
|
|
scanf("%d", &line_number);
|
|
if (line_number < 1)
|
|
{
|
|
printf("Could not analyze line\n");
|
|
return 0;
|
|
}
|
|
|
|
FILE *file = fopen("sentences.txt", "r");
|
|
if (file == NULL)
|
|
{
|
|
printf("Could not open file\n");
|
|
return 1;
|
|
}
|
|
|
|
int current_line = 1;
|
|
int word_count = 0;
|
|
int char_count = 0;
|
|
int character = 0;
|
|
|
|
int saw_char = 0;
|
|
|
|
while ((character = fgetc(file)) != EOF)
|
|
{
|
|
if(current_line != line_number && character != '\n') continue;
|
|
if (character == '\n')
|
|
{
|
|
if (current_line == line_number) break;
|
|
current_line++;
|
|
continue;
|
|
}
|
|
if (current_line == line_number)
|
|
{
|
|
if (character != '\n') char_count++;
|
|
//It is rare to meet a Lannister who shares my enthusiasm for dead Lannisters.
|
|
if (isspace(character))
|
|
{
|
|
saw_char = 0;
|
|
}
|
|
else if (isgraph(character) && !saw_char)
|
|
{
|
|
word_count++;
|
|
saw_char = 1;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (current_line < line_number)
|
|
{
|
|
printf("Could not analyze line\n");
|
|
}
|
|
else
|
|
{
|
|
printf("Word Count: %d\n", word_count);
|
|
printf("Character Count: %d\n", char_count);
|
|
}
|
|
|
|
fclose(file);
|
|
return 0;
|
|
}
|