2016-06-18 2 views
-4

저는 C++을 배우고 있으며이 문제가 발생했습니다. 누군가 내 솔루션이 왜 작동하지 않는지 설명해 줄 수 있습니까? 여기 내 코드와 문제는 다음과 같습니다 완벽하게C++의 cin 동작 이해

struct Pizza { 
    char company[30]; 
    double size; 
    int weight; 
}; 

int main() { 
    Pizza *test = new Pizza; 

    cout << "Enter size: "; 

    //from Internet, works 
    (cin >> test->size).get(); 

    //my idea, doesnt work, why ? 
    cin >> test->size; 

    cout << "Enter company: "; 
    cin.get(test->company, 30); 
    cout << "Enter weight: "; 
    cin >> test->weight; 
    cout << "Company: " << test->company<< " \nSize: " 
     << test->size << " \nWeight: " << test->weight << endl; 
    delete test; 
    cin.get(); 
    cin.get(); 
    return 0; 
} 
+0

대신 일반 지역 변수의 포인터와 새/삭제를 사용의 점은 무엇입니까? 그것은 C++을 배우는 잘못된 방법입니다. 귀하의 질문은 * 다이나믹 * –

+0

과 관련이 없습니다. "동적 구조체"와 관련이 있다고 생각한다면 문제없이 사라지지 않도록 시도해보십시오. – juanchopanza

+0

C++에 관한 책에서 운동을했습니다. 이제 문제는 struct 자체가 아니라 cin 객체에 대한 지식이 부족하다는 것을 알 수 있습니다. – Palum

답변

0

cin >> test->size; 작품 :

여전히 스트림의 새로운 라인 \n이있을 것입니다 때문에 당신이 생각 이유. 그 후, 당신이 cin.get(test->company, 30); 일 때, 그것은 스트림을 읽고 새로운 라인을 읽기 때문에 즉시 반환됩니다.

std::cin.get()을 호출하면 한 줄의 문자 인 새 줄을 읽고 스트림에서 삭제하므로 스트림이 비어 있으며 회사 이름을 입력 할 수 있습니다.

또한 나중에 그것을 호출 할 수 있습니다

cin >> test.size(); 
cin.get();