在Unix终端中打开程序时,有没有办法让程序名称及其输入在同一行?

时间:2013-01-16 17:29:54

标签: c++ unix terminal

我有一个C ++程序,它接受三个输入:宽度的整数,高度的整数和文件名。现在,我编译并运行这样的程序(假设我将其命名为prog):

>prog
// hit enter
>128 128 output.ppm

这导致输出成功,但程序描述表明正确的命令行语法是:

>prog w h filename

就是这样。这是否意味着我的程序应该能够在同一行开始?也许它隐含地意味着你在输入程序名后输入了输入,但如果没有,有没有办法实际执行此操作?

3 个答案:

答案 0 :(得分:4)

您的程序需要解析命令行参数。查看规范,预期的工作流程是

>prog 128 128 output.ppm
//hit enter after the parameters

查看here了解详情。

答案 1 :(得分:3)

您正在接近问题。程序启动后,您将通过std::cin接收输入。您的程序规范声明输入应该作为命令的一部分给出。考虑像ls -l这样的命令 - -l是命令的一部分,并传递给程序进行解析和处理。

您需要允许运行prog 128 128 output.ppm之类的命令,因此用户可以键入该命令,然后按Enter键运行该程序。如何访问C ++程序中的命令行参数?嗯,这就是argc函数的argvmain参数的用途。您的主要功能应如下所示:

int main(int argc, char* argv[]) { ... }

argc参数给出了命令行中传递的参数数量(在给定的示例中它将是4),它也是argv数组的大小。每个元素都是命令的参数。例如,argv[0]将为"prog"argv[1]将为"128",依此类推。您需要解析这些值,并根据其值更改程序的功能。

答案 2 :(得分:2)

您可以通过main函数中的参数传递命令:

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

argc是参数的数量,argv是一个参数数组。