2012-10-15 4 views
3

C++에서 사용자 문자열을 가져 오는 코드를 작성했습니다. 문제가 어디에 왜함수를 사용하여 C++ 문자열 입력

는 입력 섹션은 건너
Enter choice: 1 
Enter input: 
Enter choice: 

나도 몰라 : 여기에 코드를 위의 코드의

#include<iostream> 
#include<string> 
using namespace std; 
string input; 
void enterstring() 
{ 
    cout<<"\nEnter input: "; 
    getline(cin,input); 

} 
void displaystring() 
{ 
    cout<<"\nyour string is "<<input<<endl; 

} 
{ 
    int main() 
{ 
int choice=0; 
while(choice!=3) 
{ 

    cout<<"Enter choice: "<<; 
      cin>>choice; 
    switch(choice) 
    { 
     case 1: enterstring(); 
     break; 
     case 2: displaystring(); 
     break; 
     case 3: cout<<"\nQuit"; 
     break; 
     default: cout<<"\ninvalid choice try again"; 
     break; 


    } 
    return 0; 
} 

출력이다. 논리가 잘못되었거나 구문에 문제가있는 것입니다. while 루프 등을 사용하지 않고 함수를 호출하면 정상적으로 작동하지만이 경우 작동하지 않습니다. 도와주세요.

+0

는'CIN >> 입력 사용해보십시오하며 program.'의 지정된 시작이다 주요 라는 전역 함수를 포함한다 enterString() 함수에서' – Shashwat

+1

'프로그램을 - -ISO/IEC 14882-2011 3.6.1 p1 – nurettin

+0

@Shashwat은 문자열을 쓸 때 cin >> 입력을 사용합니다. "세계는 이기적인 사람들로 가득합니다"라고 입력하면 무한 루프가됩니다. 이것을 피하기 위해 나는 getline을 사용했다. –

답변

3

문제는 당신이 int로 선택을 읽었지만 입력이 줄 바꿈이있는 문자열이라는 것입니다.

예에서 입력이 1이 아닌 경우 "1 \ n" 1이 int로 선택되면 '\ n'이 버퍼에 있습니다. 버퍼에서 읽기 기능을하는 getline 함수를 호출하면 줄 바꿈을 찾아 빈 문자열을 반환합니다. 문자열을 사용하지 않고 atoi를 사용하여 int로 변환해야합니다.

편집 :

당신이 옳습니다. 아직 작동하지 않습니다. 하지만 여기에는 작동하는 버전이 있습니다.

#include <iostream> 
#include <string> 

using namespace std; 
string input; 
void enterstring(){ 
    cout<<"\nEnter input: "; 
    cin.ignore(); 
    getline(cin,input); 
} 

void displaystring(){ 
    cout<<"\nyour string is "<<input<<endl; 
} 

int main(){ 
    int choice=0; 
    while(choice!=3){ 
     cout<<"Enter choice: "; 
     cin>>choice; 
     switch(choice){ 
      case 1: enterstring(); 
      break; 
      case 2: displaystring(); 
      break; 
      case 3: cout<<"\nQuit"; 
      break; 
      default: cout<<"\ninvalid choice try again"; 
      break; 
     } 
    } 
    return 0; 
} 
+0

은 문자열로 choice를 사용하고 atoi를 사용하여 int로 변환합니다. 여전히 입력 부분을 건너 뜁니다. :) 모든 대답은 여기에서 작동하지 않았다. –

+0

새 코드를 보내 주셔서 감사합니다. :)하지만이 코드는 문자열을 입력 할 때마다 "thisistheworldfullofgoodpeople"과 같이 공백없이 문자열을 입력 할 때만 작동합니다. 예 : "이것은 좋은 사람들로 가득 찬 세상"입니다. 무한 루프가 발생합니다. : D 그래서 getline을 사용했습니다.); –

+1

바로 .. 이제 문제가 해결되었습니다. cin.ignore()는 –

1

당신이 게시 한 코드가 잘못되었습니다 : 당신이 "Enter choice : 후 누락되었습니다.

그 외에도 코드가 ideone에서 작동하는 것처럼 보입니다. (들여 쓰기를 추가하고 작은 버그를 수정했습니다.) 또한 main 함수를 추가했습니다. 당신은 여기에서 볼 수 있습니다 http://ideone.com/ozvB1

+0

죄송합니다. "여기에 입력 할 때 선택 사항을 입력 한 후 거기에 내 코드를 검사했습니다"라고 쓰는 것을 잊어 버렸습니다. 그 옆에 그것은 작동하지 않습니다. –

관련 문제