Question
1) Explain and fix the logical flow bug within theswitch statement. (What happens when the -h option isused?) 2) Explain and fix the argument parsing
1) Explain and fix the logical flow bug within theswitch statement. (What happens when the -h option isused?)
2) Explain and fix the argument parsing error. (Why isentrycount never zero?)
3) Fix print_result() to print results correctly and inthe same order as the words were specified on the command line.Explain your solution.
/*
About this program: This program counts words. The specific words that will be counted are passed in ascommand-line arguments. The program reads words (one word per line) from standard inputuntil EOF or an input line starting with a dot . The program prints out a summary of the number of times each wordhas appeared. Various command-line options alter the behavior of theprogram.
E.g., count the number of times cat, nap or dogappears. > ./main cat nap dog Given input: cat . Expected output: Looking for 3 words Result: cat:1 nap:0 dog:0 */
#include
#include
#define LENGTH(s) (sizeof(s) / sizeof(*s))
/* Structures */ typedef struct { char *word; int counter; } WordCountEntry;
int process_stream(WordCountEntry entries[], int entry_count) { short line_count = 0; char buffer[30];
while (gets(buffer)) { if (*buffer == .) break; /* Compare against each entry */ int i = 0; while (i < entry_count) { if (!strcmp(entries[i].word, buffer)) entries[i].counter++; i++; } line_count++; } return line_count; }
void print_result(WordCountEntry entries[], int entry_count) { int i = 0;
printf(Result:n); while (i < entry_count) { printf(%s:%dn, entries[i].word, entries[i].counter); i++; } }
void printHelp(const char *name) { printf(usage: %s [-h] n, name); }
int main(int argc, char **argv) { const char *prog_name = *argv;
WordCountEntry entries[5]; int entryCount = 0;
/* Entry point for the testrunner program */ if (argc > 1 && !strcmp(argv[1], -test)) { run_smp0_tests(argc 1, argv + 1); return EXIT_SUCCESS; }
argv++; while (*argv != NULL) { if (**argv == -) {
switch ((*argv)[1]) { case h: printHelp(prog_name); break; default: printf(%s: Invalid option %s. Use -h for help.n, prog_name,*argv); } } else{ if (entryCount < LENGTH(entries)) { entries[entryCount].word = *argv; entries[entryCount++].counter = 0; } } argv++; } // end while
if (entryCount == 0) { printf(%s: Please supply at least one word. Use -h for help.n,prog_name); return EXIT_FAILURE; } if (entryCount == 1) { printf(Looking for a single wordn); } else { printf(Looking for %d wordsn, entryCount); }
process_stream(entries, entryCount); print_result(entries, entryCount);
return EXIT_SUCCESS; }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started