C++有一种让在命令行环境中运行的程序能够访问命令行参数的机制,方法就是使用下面的main()函数:
int main(int argc,char * argv[])
argc为命令行中参数的个数,其中包括命令名本身(就是构建出来的exe程序名)。argv是个指针,指向一个char的指针。这个有点抽象,所以可以将argv看作是一个指针数组,其中的指针指向了命令行参数。argv[0]是一个指针,指向命令行中的第一个字符串。
这个程序会统计输入的多个文件内含有多少个字符,源代码如下:
// counter.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <fstream>
#include <cstdlib>
int main(int argc,char * argv[])
{
//std::cout << "Hello World!\n";
using namespace std;
if (argc==1)//quit if no arguments
{
cerr << "Usage: " << argv[0] << " filename[s]\n";
exit(EXIT_FAILURE);
}
ifstream fin;//open stream
long count;
long total = 0;
char ch;
for (int file=1;file<argc;file++)
{
fin.open(argv[file]);//connect stream to argv[file]
if (!fin.is_open())
{
cerr << "Could not open" << argv[file] << endl;
fin.clear();
continue;
}
count = 0;
while (fin.get(ch))
{
count++;
}
cout << count << "characters in " << argv[file] << endl;
total += count;
fin.clear();//needed for some implements
fin.close();//disconnect file
}
cout << total << "characters in all files\n";
return 0;
}
运行的时候,可以先构建程序,然后进入cmd命令行模式,进入到couter.exe所在的目录,运行程序:这种方式下,这两个txt文件都是和exe文件在一个目录内。
或者在visualstudio中,调试---〉couter属性----〉调试目录中设置命令参数:aaa.txt,bbb.txt。这种情况下,txt文件应该是放在项目文件所在的目录,而不是exe所在的目录。
文件位置如图: