2017-10-05 14 views
0

나는 같은 줄에 한 구절과 한 마디를 넣으려고합니다. cout << "Person 1:" <<cin>> int p1;. 아무도 내가 똑같은 일을 할 수있는 방법을 알고 있니?같은 줄에 어떻게 한장을 넣을 수 있습니까?

+0

이므로주의 할 수있다 디버거의 두 번째 이후 명령문에서 중단 점). – davidbak

+0

왜 나는 한 줄에 넣어야 할 필요성이 있는지 이해하지 못합니다. 하나의 코드 행을 저장하는 것보다 읽기 쉽고 디버그하기 쉬운 코드를 작성하는 것이 좋습니다. – rcs

+0

왜?!?! 이해하기 어려운 코드를 작성하려고 노력하고 있습니까? –

답변

0

당신은 하나의 명령/성명에서 할 수 없어 도움이된다면 내가 repl.it에 C++을 사용하고 있습니다.

당신은 이런 식으로 할 필요가 : 당신이 보였다

int p1; 
cout << "Person 1:"; 
cin >> p1; 
2

코드는 작동하지 않습니다, 당신은 std::ostream (같은이 std::cout)의 operator<<std::istream (같은 std::cin) 통과 할 수 있기 때문이다.

0

모두 다음 중 한 가지 방법으로 그들을 분리 식을 분리 할 필요가 스트림 연산자는 반환 스트림 객체입니다. cincoutistreamostream 클래스의 전역 인스턴스입니다. operator<</operator>>을 사용할 때, 체인을 제공하기 위해 반환 스트림 개체입니다. 당신이 std::cout << "he" << 11 << 'o' 같은 것을 쓸 때

, 그것은 (왼쪽 연관성 operator<<의 의 경우) 처음 std::cout << "he"를 호출 제공합니다. 그것은 코드를 완성하고 (stdout에 "he"을 인쇄하십시오) 왼쪽 인자를 반환합니다. 그래서 원래 줄은 std::cout << 11 << 'o'이고, 다시 operator<<을 args : std::cout << 11의 왼쪽으로 부를 것이며, 이제는 콘솔 "he11"이 될 수 있습니다. std::cout << 'o'으로 해석됩니다.

왼쪽 arg 스트림 객체를 반환하면 객체에도 체인이 제공됩니다. 이것은 입력 연산자와 동일합니다. stream >> x >> y;stream 값을 읽은 후 x에 저장하고 다음 값을 읽고 y에 저장합니다.

0

당신은 쓸 수 있습니다 :

int p1 = (cin >> (cout << "Person 1: ", p1), p1); 

이 분명 코드, 내가 주로 몇몇 다른 사람에 대한 응답을 게시하도록하겠습니다을 작성하는 측면에서 끔찍한 생각이 될 것입니다 실제로 불가능하다고 말했다 사람.

0

나는 왜 그런 식으로하고 싶지는 모르겠지만, 여전히 시도하고 대답 할 것입니다.

istream에 대해 < < 연산자를 오버로드하여 작업을 완료 한 다음 istream을 반환하기 전에 istream의 unget()을 사용하면 입력이 cout 변수와 p1 변수로 이동합니다.아래 예제 코드에서 확인할 수 있습니다.

#include <iostream> 
using namespace std; 
istream &operator<<(ostream& out, istream& in){ 
    int a = 0; 
    in >> a; 
    out << a; 
    in.unget(); 
    return in; 
} 

int main() 
{ 
    int p1; 
    cout << "Person 1: " <<cin>> p1; 
    cout << "Test: " << p1 << endl; 
    return 0; 
} 

이 오버로드는 특별히 정수 용이며 다른 데이터 형식에서는 작동하지 않습니다. 자주 그게 어려운 넣어 수 있지만 (한 줄에 하나 이상의 문을 넣을 수 있습니다 - 당신은 두 개의 서로 다른 진술을 구분하는 세미콜론을 시도 action here,에이 코드를 볼 수 있지만 실제 출력이 실제로

Person 1: 5 
5Test: 5 
+0

두 피연산자가 모두'namespace std'에있는 오버로드 연산자는 ADL에서 찾을 수 없다는 것을 의미합니다. 이 장난감 프로그램에서 작동하지만 이름 공간을 사용하는 더 큰 프로그램에서 실패합니다. –

+0

아, 나는 OP에서 질문에 게시 된 코드 행을 실행할 수있는 방법을 보여 주려고했습니다. 이런 식으로하는 것이 좋습니다 것은 아닙니다. –