好的,对于家庭作业,我的教授希望我们用C ++编写一个程序,从英里转换为km。我做了所有这些,程序运行。但是,他有这种特殊的方式来调用该程序:
该程序的使用选项基于 在二进制文件的名称上。如果 程序名称是'km2miles',. 程序解释命令行 争论作为公里值 转换为英里。如果名字是 'miles2km',然后它解释为 里程被转换为km。自从 第一个命令行参数,argv [0] 永远都是程序的名字,你可以 使用其值来决定哪个函数 打电话。
我在这个项目中只有3个文件(他告诉我们只有这3个): convert.cpp distance.cpp distance.h
距离.h和.cpp具有将Mi转换为Km和Vice Versa的不同功能,convert.cpp具有主要功能。但是,我知道如何调用此程序(编译后)的唯一方法是:
./ convert 10
其中10是要转换的数字。他说它应该这样称呼:
$ km2miles 100
和
$ miles2km 60
我不知道如何通过使用不同的名称让程序采取不同的行为......尤其是当该名称甚至不运行程序时!帮助将不胜感激。
答案 0 :(得分:4)
你可以:
copy convert miles2kms; copy convert kms2miles
cp convert miles2kms; cp convert kms2miles
ln -s convert miles2kms; ln -s convert kms2miles
。在你的程序中,你应该做的事情如下:
#include <string>
#include <iostream>
int main(int argc, const char* argv[])
{
std::string program_name = argv[0];
if (argc != 2) {
std::cerr << "usage: " << program_name << " <value>\n";
return 0;
}
if (/* TODO: what would go here? */)
...
else
...
}
答案 1 :(得分:2)
说明已经告诉你如何:
由于第一个命令行参数, argv [0]始终是程序名称,因此您可以使用其值来决定调用哪个函数。
特别是当该名称甚至没有运行程序时!
如果您正在使用gcc,默认情况下它会生成一个名为a.out
的二进制文件,但您可以将其重命名为您想要的任何内容。 (或者,您可以通过-o
命令行选项指定输出文件的名称。)
答案 2 :(得分:1)
好吧,他给了你一个关于argv [0]事情的线索。
您是否可以在班级的某个角落讨论符号链接?
我很难在不实际给出答案的情况下提供更多提示。
答案 3 :(得分:0)
如果您不想将相同的代码重新编译为2个不同的可执行文件,则可能需要使用符号链接: http://en.wikipedia.org/wiki/Symbolic_link