Edit 2:Первый и только CIN пропускается, даже после использования cin.ignore
Ну, получается, я просто был глуп! Это вовсе не было связано с кодом. Я запускал все с помощью сценария bash, и из-за того, как я использовал его раньше (что также не требовало ввода), я все еще запускал его с & в конце - поэтому, очевидно, я не мог получить никакого ввода от этого оболочка.
Моя программа, казалось бы скачет линия была я пытаюсь получить вход с помощью 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;
Мне нужен только один символ или номер. Я пробовал его с символом, int или строкой; и я попробовал 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
$
Только после убийства программы делает внезапно появляется на выходе. Что здесь происходит? Я весьма озадачен.
Вы не хотите, чтобы 'ignore' вообще ...' clear' тоже бессмысленно в начале. – LogicStuff
use cin.sync() достаточно – Raindrop7
Спасибо за ваш вклад! Я только добавил их, потому что это был единственный совет, который я мог найти по аналогичным проблемам, надеясь, что это может помочь. Я пробовал cin.sync(), но, к сожалению, это ничего не меняет. –