从命令行输入文件

input file from command line

我是来尝试从文件中获取输入的。如果用户 运行 来自 cmd 的这个 .exe 并给出一个文件名,如 example.exe input.txt 然后它显示文件并读取。但是,如果用户没有给出文件名,那么它 运行 就像程序的 运行 一样。

当我在 运行 期间从 cmd 给出输入时,程序 运行 运行良好 运行 完美,但如果我在 运行 期间不提供文件名] 宁这个文件和 运行 只是 example.exe 一个异常告诉我错误

exception: invalid null pointer

我的代码在这里:

// inputfile.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<string>
#include<fstream>

using namespace std;

void main(int argc, char* argv[])
{
    try {

        if (argc > 0)
        {
            string filename = argv[1];
            ifstream in(filename);
            in.open(filename);
            if (in.is_open())
            {
                cout << "file opened, do something with file";
            }
            else
            {
                cout << endl << "You have Entered Wrong File Name Or File Not Exist in Project's Library" << endl;

            }
        }

    }
    catch (exception e)
    {

    }

    cout << endl << "do with the simple program";

    _getch();
}

逻辑错误在行

  if (argc > 0)

需要

  if (argc > 1)
如果不带参数调用程序,

argv[1]NULL

argc 至少为 1,第一个参数是程序的名称。当使用一个参数调用程序时,argc 是 2,argv[1] 是第一个参数。

当只有一个参数时(始终是 exec 文件本身,例如以 ./exec_file 方式使用或双击 exec 文件),argv[1] 将抛出异常。

这里有一些提示:

  1. 尝试学习如何调试代码(IDE 如 Visual Studio、Ecplise 或 gdb)。
  2. VC++ 不是标准的 c++,这意味着它只能在 Windows 上运行,不能跨平台。你最好学会使用g++编译器(linux).