如何在终端中包含函数中的变量的同时执行C++程序



我写了一个简单的程序来计算三角形的斜边长度。我的问题是,我怎样才能给出变量"侧面1";以及";侧面2";从终端执行主功能时的值?以下代码:

#include <iostream>
#include <cmath>
int main(int side1, int side2) {
int c2 = (pow(side1, 2)) + (pow(side2, 2));

std::cout << sqrt(c2) << std::endl;
return 0;
}

该函数编译时没有错误,所以通常我会使用"从终端执行该函数/main.exe";,但是有没有一种方法可以将值传递给变量side1&执行时side2?(例如./main.exe"5"5"(。我不想走std::cin路线,因为我已经知道怎么做了。出于同样的原因,我不想给函数中的变量赋值(例如:int side1{5};(。

我不知道这是否可行,但像Leetcode这样的网站的功能是这样设置的,我不知道他们是如何为测试用例输入值的。

主函数的签名可以是

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

所以你得到一个论点计数和一个";字符串";大堆请注意,argv[0]是可执行文件名,因此side1将是argv[1]side2将是argv[2]

您需要获取命令行参数字符串并将其转换为整数。遗憾的是,如果您想捕捉错误,这确实会稍微增加程序的复杂性。

#include <cmath>
#include <iostream>
#include <string>
int help()
{
std::cerr << 
"usage:n"
"  a.exe SIDE1 SIDE2nn"
"Where SIDE1 and SIDE2 are integers.n";
return 1;
}
int main( int argc, char ** argv )
{
int side1, side2;
if (argc != 3) return help();
try {
side1 = std::stoi( argv[1] );
side2 = std::stoi( argv[2] );
}
catch (...)
{
return help();
}
int c2 = side1*side1 + side2*side2;
std::cout << std::sqrt( c2 ) << "n";
}

你可以留下很多错误检查,让程序崩溃而不做解释,但IMHO总是值得在你的程序中添加一个用法子句,以帮助用户(包括两个月后的你自己(找出如何运行程序。

如前所述,main的函数签名不正确。当您想要访问命令行参数时,正确的签名是:

int main(int argc, char **argv)

argc是参数的计数,第一个是可执行文件的名称。argv就是这些参数的数组。我们可以:

  • 检查是否传入了正确数量的参数,如果没有,则打印错误
  • 使用std::atoi将这些输入转换为int,此时我们可以随心所欲地使用它们
#include <iostream>
#include <cstdlib>
int main(int argc, char **argv) {
if (argc != 3) {
std::cerr << "Usage: "<< argv[0] 
<< " val1 val2" << std::endl;
return 1;
}
auto v1 = std::atoi(argv[1]);
auto v2 = std::atoi(argv[2]);
std::cout << v1 << ", " << v2 << std::endl;
return 0;
}

您的main签名错误。看见https://en.cppreference.com/w/cpp/language/main_function.

最新更新