Ahmed
Ahmed

Reputation: 3458

Running a program from command prompt and using argv in C++

I have written a program that takes the filename from argv[1] and do operations on it . When debugging from visual studio I pass the filename from project options>>debugging>>command arguments and It works fine and prints all results correctly .

But when trying from the command prompt , I go to the dir of project/debug the I type

program

It works fine and prints "No valid input file" in the same window (Which is my error handling technique)

but when i type

program test.txt

It just does nothing . I think no problem in code because it works fine from the debugger .

Code :

int main(int argc, char *argv[]) 
 { 
int nLines;
string str;

if(argv[1]==NULL)
{
    std::cout << "Not valid input file" << endl;
    return 0 ;

}
ifstream infile(argv[1]);

getline(infile,str);
nLines = atoi(str.c_str());//get number of lines

for(int line=0 ;line < nLines;line++)
{
    //int currTime , and a lot of variables ..
            //do a lot of stuff and while loops
          cout << currTime <<endl ;

}
    return 0 ;
    }

Upvotes: 0

Views: 932

Answers (3)

John Dibling
John Dibling

Reputation: 101506

This code worked correctly for me running on the command line.

#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <iostream>
using namespace std;

int main(int argc, char *argv[]) 
{ 
    int nLines;
    string str;

    if(argv[1]==NULL)
    {
        std::cout << "Not valid input file" << endl;
        return 0 ;

    }
    else
        std::cout << "Input file = " << argv[1] << endl;
}

Output :

C:\Users\john.dibling\Documents\Visual Studio 2008\Projects\hacks_vc9\x64\Debug>hacks_vc9.exe hello
Input file = hello

By the way, this code is dangerous, at best:

if(argv[1]==NULL)

You should probably be checking the value of argc before attempting to dereference a possibly-wild pointer.

Upvotes: 3

user405725
user405725

Reputation:

You don't check if file was successfully opened, whether getline returned error code or not, or if string to integer conversion didn't fail. If any of those error occur, which I guess is the case, nLines will be equal to 0, no cycles will be performed and program will exit with return code 0.

Upvotes: 3

sehe
sehe

Reputation: 393934

The file probably contains an invalid numeric first line (perhaps starting with a space or the BOM).

That would explain no output, since if nLines == 0 no output should be expected

Upvotes: 1

Related Questions