2017-11-28 20 views
0

첫 번째 출력 줄에서 첫 번째 문자열로 null 문자를 사용하고있는 것으로 보입니다. 또한이 때문에 입력으로 가져온 마지막 문자열이 누락되었습니다. 나는 getline의 사용법을 놓치고 있을지 모르지만 나는 확신 할 수 없으며 어떤 도움도 인정 될 것이다. 당신이 cin>>t; 할 후C++의 Getline 함수가 첫 번째 입력을 null 문자로 사용하고 있습니다. 그렇게해야합니까?

int main() { 
    short int t,i; 
    cin>>t; 
    string a; 
    while(t–) 
    { 
     getline(cin,a); 
     cout<<"length of string is "<<a.length()<<endl; 
     for(i=0;i<a.length()/2;i+=2) 
     { 
      cout<<a[i]; 
     } 
     cout<<endl; 
    } 
    return 0; 
} 

INPUT

 
4 
hello 
understand 
think 
programming 

OUTPUT

 
length of string is 0 
length of string is 5 
h 
length of string is 10 
udr 
length of string is 5 
t 
+0

'cin >> t;'를 실행 한 후에 버퍼는 여전히'getline()'에 의해 읽히는 개행 문자 시퀀스를 포함합니다. –

+0

오른쪽에있는 관련 질문을보십시오. – chris

답변

2

는, 버퍼는 여전히 줄 바꿈 순서가 포함되어 있습니다. 그런 다음 getline()은 사용자가 아무 것도 입력하지 않고 Enter 키를 눌렀다 고 생각하도록 즉각적인 개행을 읽습니다.

이 문제를 해결하려면 getline()을 호출하기 전에 개행을 무시해야합니다.

+0

개행을 사용 하시겠습니까? 어떻게 그럴 수 있니? –

+1

@ machine_1'cin.ignore()'에 대한 문서를보십시오. 나는이 질문이 Stack Overflow에서 전에 여기에 대답되어 왔음을 확신한다. 내가 문제를 설명 했으니 이제 좀 더 조사해 보길 권한다. –

1

cin>>t을 호출하면 숫자가 아닌 문자에 도달하면 읽기가 중지되므로 cin의 버퍼에 줄 바꿈이 남습니다. 후속 std::getline()은 해당 줄 바꿈을 읽고 빈 문자열을 반환합니다. t의 라인을 읽은 다음 std::istringstream를 사용하는

#include <string> 
#include <iostream> 
#include <limits> 

int main() 
{ 
    short int t; 

    std::cin >> t; 
    std::cin.ignore(std::numeric_limits<std::streamize>::max(), '\n'); // <-- add this! 

    while (t-– > 0) 
    { 
     std::string a; 
     std::getline(std::cin, a); 
     std::cout << "length of string is " << a.length() << std::endl; 
     for (std::string::size_type i = 0; i < (a.length()/2); i += 2) 
     { 
      std::cout << a[i]; 
     } 

     std::cout << std::endl; 
    } 

    return 0; 
} 
  • 사용 std::getline() :

    • 전화 cin.ignore() 그 줄 바꿈을 제거하는 cin>>t를 호출 한 후 :

      그래서, 당신도 할 필요가 해당 행에서 t의 값을 구문 분석하십시오.

      #include <string> 
      #include <iostream> 
      #include <sstream> 
      
      int main() 
      { 
          short int t; 
          std::string a; 
      
          std::getline(std::cin, a); 
          std::istringstream(s) >> t; 
      
          while (t-– > 0) 
          { 
           std::getline(std::cin, a); 
           std::cout << "length of string is " << a.length() << std::endl; 
           for (std::string::size_type i = 0; i < (a.length()/2); i += 2) 
           { 
            std::cout << a[i]; 
           } 
      
           std::cout << std::endl; 
          } 
      
          return 0; 
      }