Запуск программы из командной строки и использование argv в C ++ - PullRequest
0 голосов
/ 29 апреля 2011

Я написал программу, которая берет имя файла из argv [1] и выполняет операции над ним.При отладке из Visual Studio я передаю имя файла из параметров проекта >> отладка >> аргументы команды, и он работает нормально и печатает все результаты правильно.

Но при попытке из командной строки, я иду в каталог проекта/ debug I типа

program

Он работает нормально и печатает "Нет допустимого входного файла" в том же окне (что является моей техникой обработки ошибок)

, нокогда я набираю

program test.txt

Это просто ничего не делает.Я думаю, что нет проблем в коде, потому что он отлично работает от отладчика.

Код:

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 ;
    }

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Вы не проверяете, был ли файл успешно открыт, вернул ли getline код ошибки или нет, или преобразование строки в целое число не завершилось неудачно. Если произойдет какая-либо из этих ошибок, что, как я полагаю, имеет место, nLines будет равно 0, циклы не будут выполняться, и программа завершится с кодом возврата 0.

3 голосов
/ 29 апреля 2011

Этот код работал правильно для меня, работающего в командной строке.

#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;
}

Выход:

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

Кстати, этот код в лучшем случае опасен:

if(argv[1]==NULL)

Вероятно, вам следует проверить значение argc, прежде чем пытаться разыменовать возможно дикий указатель.

1 голос
/ 29 апреля 2011

Файл, вероятно, содержит недопустимую первую цифровую строку (возможно, начинающуюся с пробела или BOM ).

Это объясняет отсутствие вывода, поскольку, если nLines == 0, вывода не следует ожидать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...