Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

pseudocode for reading these command line arguments?

I wrote a program that takes in a txt file and returns an array of the number of characters, words, and lines. This is basically the wc command.

I’m trying to implement -l, -c, -w for the user to enter into the command line to specify which ones the user wants to see. If none of -l, -c, -w are given, it prints all of them. If the user types ./wc -l -c -w -l -c -w then it still only prints it once. After -l, -c, -w the user types in the file name.

An example would be ./wc -l -c -w alice.txt anh.txt.
This would print lines, characters, and words for both text files.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I’m struggling to think of a way to do this. Here is the code I have that returns the array.

I have an idea something like we loop through all arguments and if it finds either -l or -c or -w it will return 1 for true, add it to a separate array, and use that array to print out what is needed.

int *get_counts(char *filename)
{

        FILE *file = fopen(filename, "r");

        if (file == NULL)
        {
                printf("NULL FILE");
                exit(1);
        }

        int c;
        bool whitespace = true;
        static int arr[3] = {0,0,0};
        for(;;)
        {
                c = fgetc(file);
                if (c == EOF)
                {
                        break;
                }
                else if (c == '\n')
                {
                        arr[0]++;
                }
                else if (whitespace && !isspace(c))
                {
                        arr[1]++;
                        whitespace = false;
                }
                else if (!whitespace && isspace(c))
                {
                        whitespace = true;
                }
                arr[2]++;
        }
        fclose(file);
        return arr;
}

>Solution :

Here is pseudocode for parsing the arguments:

Initialize flag variables: l, c, w = 0
Loop from i = 1 to argc - 1:
    Check value of argv[i]:
        When "-l", set l flag to 1
        When "-c", set c flag to 1
        When "-w", set w flag to 1
        Otherwise, break loop
Interpret remaining values from argv as filenames
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading