Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

#include #include smp0_tests.h

#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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Security

Authors: Alfred Basta, Melissa Zgola

1st Edition

1435453905, 978-1435453906

More Books

Students also viewed these Databases questions

Question

Explain why ceramics are weaker in tension than in compression?

Answered: 1 week ago