编辑2:
好吧,事实证明我只是愚蠢!它与代码根本没有任何关系。我通过bash脚本运行所有内容,并且因为我之前使用它(它也不需要任何输入)我仍然使用&运行它。最后 - 显然我无法从那个shell获得任何输入。
如果我尝试使用cin接收输入,我的程序似乎会跳过这一行(它会直接进入下一行)。
编辑:请查看我放置新代码的底部以及会发生什么。
我在这里搜索并用Google搜索,我发现很多问题,人们遇到同样的问题!据我所知,这个问题几乎总是一个剩下的问题' \ n' - 但是没有一个解决方案对我有用。这是有问题的代码:
//char input_char;
std::string input_string;
//int input_int;
//std::string line;
std::cout << "hello. your input: ";
std::cin.clear();
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
std::cin >> input_string;
// std::getline(std::cin, input_string);
std::cout << "input: " << input_int << endl;
我只需要一个字符或数字。我用字符,整数或字符串尝试过它;我已经尝试过cin和getline。我已经添加了明确的内容并忽略了其他类似问题的建议,但我仍然遇到同样的问题。
这是我的主要开头,所以我在此代码之前没有做任何其他cout或cin。但是,这是一个更大的项目的一部分,我使用ros。在程序到达此部分之前,还有其他输出通过ros处理;没有其他输入。
我非常感谢你帮忙解决这个问题!我觉得我必须遗漏一些非常明显的东西......
编辑:我现在已经完全注释掉了与此输入无关的所有内容,并将cin移到了主要的顶部。这是完整的代码(遗漏了注释部分):
#include <iostream>
#include <ros/ros.h>
#include <vector>
#include <ros/console.h>
#include "std_msgs/String.h"
//#include <SharedMessages/MicroconRequest.h>
/* ... */
//ros::Publisher reqPublisher;
//SharedMessages::MicroconRequest reqMsg;
/* ... */
int main( int argc, char* argv[] )
{
char input_test;
std::cout << "character: ";
std::cin >> input_test;
std::cout << input_test;
std::cout << "did that work?";
// Handle ROS communication
ros::init( argc, argv, "Gestures" );
ros::NodeHandle n;
//ros::Subscriber joy_sub_ = n.subscribe<sensor_msgs::Joy>("joy", 10, joyCallback, this);
//reqPublisher = n.advertise<SharedMessages::MicroconRequest>("MicroconRequest", 10);
ros::Rate loop_rate(10);
// Infinite control loop
while (ros::ok())
{
/* ... */
cntLoop++;
ros::spinOnce();
loop_rate.sleep();
}
// turn off microcontroller
return 0;
}
现在发生的事情如下:
$ ./startDemo.bash
Starting Minimal Example
$ character: a # now I have time to input something, but...
a: Befehl nicht gefunden. # = command not found]
# then it doesn't do anything, so I stop it
$ ./stopDemo.bash
killing /Gestures
did that work?[ WARN] [1473954737.268901991]: Shutdown request received.
[ WARN] [1473954737.268978735]: Reason given for shutdown: [user request]
killed
$
只有在杀死程序后才会突然出现输出。这里发生了什么?我很困惑。
答案 0 :(得分:0)
我不明白您关于跳过一行的原始问题,但是在您关闭之前没有打印任何内容的原因是您错过了输出中的endl
。我添加了它,输出看起来像你期望的那样?
char input_test;
std::cout << "character: ";
std::cin >> input_test;
std::cout << input_test;
std::cout << "did that work?" << std::endl;
输出:
root@93043381199d:/catkin_ws/devel/lib/stack# ./stack_node
character: a
adid that work?
答案 1 :(得分:0)
好吧,事实证明我只是愚蠢!这根本与代码无关:
我通过bash脚本运行所有内容,并且因为我之前使用它(也不需要任何输入),我仍然在最后使用&amp; 运行它 - 很明显我无法从那个shell获得任何输入。
[注意:我不确定回答一个人自己的问题是否是一种好习惯;起初我刚刚编辑过它。但我觉得它比让它保持开放更有意义。]