从命令提示符运行程序并在 C++ 中使用 argv;

发布于 2024-11-04 14:40:17 字数 857 浏览 0 评论 0原文

我编写了一个程序,它从 argv[1] 获取文件名并对其进行操作。 从 Visual Studio 进行调试时,我从项目选项>>调试>>命令参数传递文件名,它工作正常并正确打印所有结果。

但是,当从命令提示符尝试时,我转到项目/调试的目录,我输入

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

手心的海 2024-11-11 14:40:17

您不检查文件是否已成功打开,getline 是否返回错误代码,或者字符串到整数的转换是否未失败。如果发生任何这些错误(我猜是这种情况),nLines 将等于 0,不会执行任何循环,程序将退出并返回代码 0 。

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.

铁轨上的流浪者 2024-11-11 14:40:17

这段代码对我在命令行上运行来说是正确的。

#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 的值。

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.

最笨的告白 2024-11-11 14:40:17

该文件可能包含无效的数字第一行(可能以空格或 BOM 开头) 。

这可以解释没有输出,因为如果 nLines == 0 则不应有输出

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文