首页 > 解决方案 > 将 argv 参数转换为双精度

问题描述

我在 Ros 中创建了一个 .srv 文件。其结构如下。

float64 a
float64 a
---
bool response

现在我尝试读取argvas中的字符float。无论我通过哪些值,我的输出总是相同的。输出:

check Numbers
a: 94290532670520
b: 0

我的错误在哪里?提前致谢。

int main(int argc, char **argv)
{
  rclcpp::init(argc, argv);

  if (argc != 3) {
      RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "usage: add_two_ints_client theta x");
      return 1;
  }

  std::shared_ptr<rclcpp::Node> node = rclcpp::Node::make_shared("add_two_ints_client");
  rclcpp::Client<robot_control::srv::RobotControl>::SharedPtr client =
    node->create_client<robot_control::srv::RobotControl>("add_two_ints");

  auto request = std::make_shared<robot_control::srv::RobotControl::Request>();  
  request->theta = std::atof(argv[0]);
  request->x = std::atof(argv[1]);

//  request->theta = std::atoll(argv[1]);
//  request->x = std::atoll(argv[2]);


  RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "check Numbers\na: %ld" " b: %ld",
                request->theta, request->x);

标签: c++command-line-arguments

解决方案


  1. argv[0]是程序名称;你可能的意思是argv[1]argv[2]
  2. 您的日志输出错误;%ld表示long int, 不floatdouble. 试试%f

推荐阅读