getline (cin, variablehere) 함수를 사용할 때 프로그램에서 일부 코드를 건너 뜁니다. 코드에 무슨 문제가 있는지 모르겠습니다. 그것은 단지getline (cin, variable) 함수가 일부 코드 행을 건너 뜁니다.
답변
모두cin.ignore()
명령을 삭제하는 것이 좋습니다. 사용자 입력에 대한 문제의
하나는 대신 당신이 입력하고 싶은의 RETURN 문자를 읽어들이는 getline()
getline()
로를 따른다면 있도록 >>
운영자가 스트림 밖으로 RETURN 문자를하지 않는다는 것입니다.
그래서 모든 당신의 getline()
이 변경 것 :
// cin >> ws will skip any RETURN characters
// that may be left in the stream
getline(cin >> ws, lastname);
을 또한 cin.ignore()
의 모든을 제거 명령. 그들은 getline()
명령 후에 사용할 때 아무런 도움이되지 않고, 내가 보여준대로 getline()
명령을 변경하면 전혀 필요하지 않습니다.
int main()
{
string getfirstname;
string lastname;
string address;
char response;
int contactnumber;
int CurrentNumberOfContacts = 0;
cout << "Enter First name : ";
getline(cin >> ws, getfirstname);
cout << "Enter Last name : ";
getline(cin >> ws, lastname);
cout << "Enter Address : ";
getline(cin >> ws, address);
cout << "Enter Contact number : ";
cin >> contactnumber;
CurrentNumberOfContacts += 1;
cout << "Successfully added to contact list!" << endl << endl;
cout << "Would you like to add another contact ? [Y/N] ";
cin >> response;
//more lines of codes below
return 0;
}
엄격하게 getline()
기능의 모든 말하기 cin >> ws
트릭을 사용해야합니다
그래서이 작동합니다.
std::getline(cin >> ws, line);
그렇지 않으면 바로 사용 : @Galic에 의해
std::getline(cin, line);
cin >>
및 getline
잘 협조하지 않는 번호를 포함하기 때문에 데이터 유형으로 '지능'inputed 한
#include <iostream>
#include <string>
using namespace std;
int main()
{
string getfirstname;
string lastname;
string address;
int contactnumber;
cout << "Enter First name : ";
getline(cin, getfirstname);
cin.ignore();
cout << "Enter Last name : ";
getline(cin, lastname);
cin.ignore();
cout << "Enter Address : ";
getline(cin, address);
cin.ignore();
cout << "Enter Contact number : ";
cin >> contactnumber;
cin.ignore();
CurrentNumberOfContacts += 1;
cout << "Successfully added to contact list!" << endl << endl;
cout << "Would you like to add another contact ? [Y/N] ";
cin >> response;
//more lines of codes below
return 0;
}
아래의 출력을 참조하십시오. 그들은 공백을 다루는 방법에 대해 다른 전략을 가지고 있습니다. getline
은 줄 바꿈 문자를 제거하지만 cin >>
은 남겨 둡니다. 즉, cin >>
을 사용하여 내용을 읽은 후 입력 스트림에서 "사용"하기 위해 다음 getline
을 기다리는 줄 바꿈 문자가 남아 있음을 의미합니다. 즉 문자열에 빈 줄을 읽습니다.
형식화 된 입력을 사용하여 직접 * std :: getline()을 사용하는 경우에만 해당됩니다. 이 경우 형식화되지 않은/형식화되지 않은 입력과는 아무런 관련이 없습니다. – 0x499602D2
결국 그는 이것을 루프로 호출 할 것입니다. 그렇지 않으면 그는 선언문을 포함하는 것을 잊어 버린 'CurrentNumberOfContacts' 변수를 사용하는 것을 꺼려하지 않을 것입니다. – Wug
@Wug는 아마도 언젠가 루프에 들어갈 것입니다. 언젠가는'std :: getline'을 사용할 때'std :: cin'이 다른 텍스트 모드 스트림보다 어떻게 발산되는지에 관해서는이 대답을 부정확합니다. (그렇지 않다), 아마도 * 다음 질문에 대한 답을 알맞은 출발점으로 삼을 것이다. 이건 아니야. – WhozCraig
2 가지. 첫째, 당신이 정말로 당신의
cin >> variable
둘째 전에
getline().
를 사용하여이 경우에 cin.ignore()를 필요로하지 않는다, 나는 당신의 프로그램이 실행되지 않는 이유를 모르겠지만
getline()
전화를 걸고 그 것이 작동하는지 확인하는 것이 좋습니다. 하지만 코드가 작동하지 않는 이유는 없습니다.
대답을 제공
을 당신이 std::getline()
>>
후 다음 사용하는 사용하는 경우 : I는 다음과 같이 (불완전한) 규칙이있는 가정 아주 좋습니다. 그러나 선행 공백을 버리지 않고 한 줄의 문자를 읽고 싶다면 다른 해결책이 필요합니다.
당신은 할 수 :
char a='\n';
while (a=='\n')
{
cin.get(a);
}
cin.unget();
첫 번째의 getline을하기 전에. 이것은 이전의 cin으로 인한 후행 공백이없고 첫 번째 입력 행이 비어 있지 않다고 가정합니다.
- 1. 프로그램의 getline 건너 뜁니다
- 2. C++ CIN cin 무작위로 건너 뜁니다.
- 3. 여러 호출 후에 getline()이 건너 뜁니다.
- 4. getline (cin, var)이 작동하지 않습니다!
- 5. do/while 루프에서 Cin 입력을 건너 뜁니다.
- 6. Android에서 일부 의도를 건너 뜁니다.
- 7. Foreach가 마지막 행을 건너 뜁니다.
- 8. perl regex가 행을 건너 뜁니다.
- 9. C++ Cin 뒤의 Getline
- 10. 가드 건너 뜁니다
- 11. getline (cin, s1) 입력을 묻지 않습니다.
- 12. MySQL로드 데이터 InFile; 행을 건너 뜁니다. IF
- 13. getline (cin, string) 전에 cin.ignore()를 사용해야하는 이유는 무엇입니까?
- 14. 디버깅 중 xdebug가 행을 건너 뜁니다.
- 15. 애니메이션 후 jQuery 함수가 건너 뜁니다.
- 16. 스트림 버퍼 (cin, getline 등)
- 17. CDT Builder에서 cin :: getline 문제
- 18. Nunit TestCaseSource가 일부 사례를 건너 뜁니다.
- 19. Lucene 검색에서 일부 결과가 건너 뜁니다.
- 20. Selenium Webdriver가 표의 행을 건너 뜁니다.
- 21. 대량 삽입은 마지막 행을 건너 뜁니다.
- 22. Java는 System.out.println()의 행을 건너 뜁니다.
- 23. Ruby RPG의 버그 (행을 건너 뜁니다.)
- 24. readLine은 출력 할 때 행을 건너 뜁니다.
- 25. 실수로 사용자 입력을 건너 뜁니다.
- 26. getline (cin, string) not working cin.ignore()
- 27. visual studio 2012에서 getline() 함수가 다르게 작동하여 마지막 행으로 직접 건너 뜁니다.
- 28. 프로그램 건너 뛰기 std :: getline
- 29. C++의 getline 패스 파일 또는 CIN
- 30. cin/cout을 건너 뛰었습니다.
스크린 샷을 제거하고 여기에 출력을 게시하십시오. –
전화 번호는 정수가 아닙니다. –
당신은 cin >> contactline 대신 getline (cin, contactnumber) –