I recently learned the command-line argument from my book, and I understand that both of argc and argv. HOWEVER, I don't know when I will use them and for what purpose??? I appreciate if anybody can help me!!:sad:

Dani AI

Generated

Brief primer and practical follow-ups to the thread (adds on the answers from and ).

Command-line arguments are the simplest way to control a program at run time: positional values (like two numbers), option flags (like -f file.txt), or filenames that the program will open and process. argv[0] normally contains the program name/path and is useful inside a usage message. Arguments are ideal for automated runs and scripts, as mentioned; passing a filename only hands the name to the program — the program must open and read that file, as explained.

Safer numeric parsing and basic pattern for a tiny utility (uses C++ standard library error reporting instead of C atof):

#include <iostream>
#include <string>

int main(int argc, char* argv[])
{
    if (argc != 3) { std::cerr << "Usage: add NUM NUM\n"; return 1; }
    try {
        double a = std::stod(argv[1]);
        double b = std::stod(argv[2]);
        std::cout << (a + b) << '\n';
    } catch (const std::invalid_argument&) {
        std::cerr << "Error: numeric argument required\n";
        return 2;
    } catch (const std::out_of_range&) {
        std::cerr << "Error: argument out of range\n";
        return 3;
    }
}

Example for accepting a filename and reading two numbers from it (use std::ifstream and check the stream). That avoids the mistake of creating a .txt that merely contains the text add 100 200 — on Windows a .txt will be opened by the associated editor rather than executed. For automation, use a .bat (Windows) or a shell script (Unix) or input redirection (program < data.txt) to feed data.

Quick troubleshooting checklist

  • Always check argc before accessing argv[n].
  • Prefer std::stod/std::stoi (or std::from_chars where available) to detect bad input instead of atof.
  • Quote arguments that contain spaces.
  • For more options or long switches, use a command-line parsing library (getopt/getopt_long on POSIX, or modern C++ libraries) when the option set grows.

Recommended Answers

All 5 Replies

It is used when you want to control your program from the command line. Rather than promting the user for input, say for example entering a filename, you can use a switch like -f filename.txt and that will be all the program needs for execution. The command line arguments are particularly useful for automated testing. If you have a lot of inputs to test, you can't always enter them by hand. So you can create a bash or dos script that creates the appropriate commandline for each input and run the program by passing those arguments.

Thank you for your help. It took me a long time trying to understand what you said. Finally, I understand the meaning of the program its in my book. The program named add (which add two numbers and output the result) , and I wrote that program and use command-line to test. It works!! The sample program named add is

#include<iostream>
#include<cstdlib>
using namespace std;
int main( int argc, char *argv[])
{
double a, b ;
if (argc != 3)
{
cout << "Usage : add num num \n";
return 1;
}
a = atof ( argv [1] );
b = atof ( argv [2] );
cout << a + b ;
return 0 ;
}

But, I got some other problems...
The sample program add in my book is designed for use in command-line (at least I think that way). So, if I want to test some program from the command-line, should I always include for example like this part in my program?

int main( int argc, char * argv[])
a = atof ( argv [1] ); b = atof ( argv [2] );

And also in your explanation, you put -f filename.txt . This is text filename. What I did is just put filename and 2 numbers (add 100 200), and that files extension is .exe. I tried to use text file which I simply typed add 100 200 in the note pad and saved it with the extension .txt and put that file name in the command-line. Then what is does is just to open that file...... ( I know its stupid...)

I think I still can't fully understand what you said....(I got some)
If you have time, please help me.

So, if I want to test some program from the command-line, should I always include for example like this part in my program?

int main( int argc, char * argv[])
a = atof ( argv [1] ); b = atof ( argv [2] );

Those things are included there becoz whatever we accept from the command is passed to the program in the form of char* (old C style strings) -- thats why the main() prototype contains char* argv[] which means argv is an array of char* or C style strings. atof is used since what we want to do is add two floating point values but they are supplied by the user in String format -- so we need to convert from string to float so that they can be added in a natural way.

And also in your explanation, you put -f filename.txt . This is text filename. What I did is just put filename and 2 numbers (add 100 200), and that files extension is .exe. I tried to use text file which I simply typed add 100 200 in the note pad and saved it with the extension .txt and put that file name in the command-line. Then what is does is just to open that file...... ( I know its stupid...)

The filename specified at the command line is also accepted by the prog as C style string. So inorder to make use of the data present in the file, you need to open the file with the file name specified on the command, pull the values present in the file and add them together. Just specifying the file name wont do the job. Think of command line arguments as another way of passing arguments to the program just like "Wolfpack" said.

Related to this explanation see

http://www.cprogramming.com/tutorial/lesson14.html
(excellent sample)

Hope it helped, bye.

The best thing for you to do is to design a command line argument handling program by yourself. Maybe you will find one in the exercises of your book. If you find one, do it and post it here with the question for us to check. If you can't find one tell me and I will give you an exercise :)

Thank you for all your help. I will keep studying my book and if I can find exercise program, I will do it or try writing one myself. The way to become programmer is far away for me......but I will not give up!!! Thank you.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.