2016-09-14 2 views
-1

편집이 사용 후 :먼저 &에만 건너 CIN, 심지어 cin.ignore에게

글쎄, 난 그냥 바보 당하고 밝혀! 코드와 전혀 관련이 없습니다. 나는 bash 스크립트를 통해 모든 것을 돌리고 있었고, 이전에 그것을 사용하고 있었기 때문에 (어떤 입력이 필요하지도 않았다.) 나는 결국 &으로 실행했다. 그래서 분명히 나는 ​​그 어떤 입력도 얻을 수 없었다. 껍질.


내 프로그램이 cin (다음 줄로 바로 이동)을 사용하여 입력을받는 것처럼 보였습니다.

편집 : 새 코드를 삽입 한 부분과 그 결과를 확인하십시오.

나는 여기를 검색하고 인터넷 검색을했고 사람들이 같은 문제를 겪고있는 많은 질문을 발견했습니다. 내가 아는 한, 문제는 거의 항상 남은 '\ 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을 시도했다. 다른 비슷한 질문에 대해 제안 된 바와 같이 명확하고 무시 된 내용을 추가했지만 여전히 동일한 문제가 있습니다.

이 코드는 본문의 시작 부분에 있으므로이 코드를 사용하기 전에 다른 어떤 코드 또는 cin도 사용하지 않습니다. 그러나 이것은 더 큰 프로젝트의 일부이며, 나는 ros를 사용하고 있습니다. 프로그램이이 부분에 도달하기 전에 ro를 통해 처리되는 다른 출력이 있습니다. 다른 입력.

여러분의 도움에 감사드립니다. 나는 정말로 명백한 무엇인가 놓치고 있어야하는 것처럼 느낀다. ...

편집 : 나는 지금이 입력과 직접적으로 관련이없는 모든 것을 주석 처리했으며 cin을 맨 위 맨 위로 옮겼다. 이것은 (주석 부분이 왼쪽으로) 이제 전체 코드입니다 : 프로그램을 죽이는하지

$ ./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 
$ 

후에 만 ​​출력이 갑자기 나타납니다

#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; 
} 

지금 무슨 일 다음이다. 여기서 무슨 일이 일어나고있는거야? 난 너무 혼란 스러워요.

+0

'무시'하지 않으려합니다 ... 처음에는 'clear'도 무의미합니다. – LogicStuff

+0

cin.sync()를 사용하면 충분합니다. – Raindrop7

+0

입력 해 주셔서 감사합니다! 그것이 도움이되기를 희망하면서 비슷한 문제에서 찾을 수있는 유일한 조언 이었기 때문에 나는 그것들을 추가했다. cin.sync() 시도했지만 불행히도 아무것도 변경하지 않습니다. –

답변

0

글쎄, 난 그냥 바보 당하고 밝혀! 이 코드와 관련해서는 아무 것도 아니 었습니다 :

나는 bash 스크립트를 통해 모든 것을 돌리고 있었고, 이전에 어떻게 사용하고 있었는지 (입력이 필요하지 않았기 때문에) 나는 여전히 그것을 실행하고있었습니다. &으로 끝납니다. 분명히 그 쉘에서 어떤 입력도 얻을 수 없었습니다.

[참고 : 자신의 질문에 대답하는 것이 좋은 연습인지 잘 모르겠습니다. 처음에는 방금 편집했습니다. 하지만 그냥 열어 두는 것보다 더 합리적이라고 생각했습니다.]

0

줄을 건너 뛰는 것에 대한 원래의 질문을 이해할 수 없지만 종료 할 때까지 아무 것도 인쇄되지 않는 이유는 출력에서 ​​endl이 누락되었다는 것입니다. 나는 그것을 덧붙여서 출력물이 예상대로 나왔다.

char input_test; 
std::cout << "character: "; 
std::cin >> input_test; 
std::cout << input_test; 
std::cout << "did that work?" << std::endl; 

는 출력 :

[email protected]:/catkin_ws/devel/lib/stack# ./stack_node 
character: a 
adid that work? 
+0

안녕하세요, 당신의 도움에 감사드립니다! 원래 문제는 내가 아무 것도 입력 할 기회를 얻지 못했다는 것입니다. 즉, 코드의 다음 줄로 즉시 건너 뜁니다. 나중에, 문제는 내가 뭔가를 입력 할 시간이 있었지만 "Befehl nicht gefunden"= "Command not found"라고 말하는 말단 명령으로 해석 될 것입니다. 그러나 결국 해결할 수있었습니다. 결국 코드에 문제가 없었습니다. 시작하기 위해 사용했던 bash 스크립트 때문이었습니다 ... 나는 단지 매우 어리 석습니다. –