2013-11-21 5 views
-1

다음 간단한 프로그램을 사용하여 C++에서 문자열을 인쇄합니다. 그러나이 프로그램은 전체 문자열을 읽지 않고 공백보다 먼저 문자를 읽습니다.C++ 프로그램에서 전체 문자열이 표시되지 않습니다.

#include<iostream> 
using namespace std; 
int main() 
{ 
    char str[90]; 
    cout << "Enter a string:"; 
    cin >> str; 
    cout << str; 
system("pause"); 
} 
+2

['표준 : getline'] (http://en.cppreference.com/w/cpp/string/basic_string/ :

당신은 컴파일이 순서대로 두 개의 헤더를 추가해야 getline) – P0W

답변

3

을 : 공백 및 탭과 같은 공백 문자에 cin "휴식"라인.

또한 입력을 90 자로 제한하고 있습니다.이 중 90 문자 이상을 입력하지 않으면 버퍼가 오버 플로우됩니다. 여기

는 그것을 해결하는 방법입니다 :

std::string str; 
std::cout << "Enter a string: "; 
std::getline(std::cin, str); 

문자 배열과는 달리, std::string 객체가 동적으로 성장할 수있는, 그래서 그들은 사용자가 입력 선택하는 문자의 수를 수용 할 것이다.

#include <string> 
#include <iostream> 
2

>>은 하나의 단어를 읽습니다.

cin.getline(str, sizeof str); 

이제 문제는 너무 오래 있다면 선이 절단 될 것입니다 : 당신은 getline은 전체 라인을 읽고 싶어. 이 문제를 해결하려면, 오히려 고정 된 크기의 버퍼보다 ​​문자열을 사용 : 이것은 의도적으로 설계된 동작입니다

string str; 
getline(cin, str); 
관련 문제