The following will use lorem.txt
as the test file:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
I have the following code meant to count lines, words, and characters in a file (trying to imitate the wc
in Linux):
#include <stdio.h>
int main(){
char data[500032]; // assigns 500KB of space for input string
if (fgets(data, sizeof data, stdin)) {
char *ptr = &data[0]; // initializes pointer at first character
int count = 0; // total character count
int d1_count = 0; // newline count
int d23_count = 0; // ' ' and '\t' count
while (*ptr){
char d1 = '\n';
char d2 = ' ';
char d3 = '\t';
count++; // counts character
if (*ptr == d1){
d1_count++; // counts newline
}
if (*ptr == d2 || *ptr == d3) {
d23_count++; // counts spaces or tabs
}
ptr++; // increments pointer
}
printf("%d %d %d\n", d1_count, d23_count+1, count-1);
}
}
In my Linux terminal, I use gcc -o wordc wordc.c
to compile and then ./wordc < lorem.txt
However, I get 1 69 445
(1 line, 69 words, and 445 characters). This is the number of lines, words, and characters for the first paragraph only. I am expecting 7 lines, 207 words, and 1342 characters.
I assume what is happening is C stops reading the file once it finds a newline. How do I get it to stop doing this?
As an aside- I feel like assigning 500KB of space for a string is a bit hacky and wasteful. Are there any good ways to assign only as much space as I need?
Any help would be appreciated