2015-02-06 2 views
-3

입력을하고 그 출력을 표시하려면 다음 코드를 작성하지만 문제는 std::cin에 의해 소비되지 않는 스트림에 남아 줄 바꿈이있다 1.이 코드가 stdin을 사용하지 않고 출력 fot tc = 1을 제공하지 않는 이유는 무엇입니까?

#include<iostream> 
#include<string.h> 
#include<stdio.h> 
using namespace std; 
main() 
{ 
    int tc,n; 
    char ch[1000]; 
    cin >>tc; 
    while(tc--){ 

    gets(ch); 
    puts(ch); 
}} 
+0

'gets '가 안전하지 않기 때문에'fgets'를 선호하거나 완전히 피하고'cin' 또는'getline'을 고수하십시오. –

+2

C 또는 C++로 작성하려고합니까? 어떤 방법으로 작동하지 않습니까? 어쨌든'gets'를 사용하지 마십시오. 버퍼 오버 플로우를 막을 수 없습니다. –

답변

1

에 TC를 줄 때 그것은 나던 작동합니다. gets에 의해 소비되었지만 삭제되었습니다. 그것은 간단한 수정의, <limits>을 포함 cin 후이를 넣어 :

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

그것은 부주의 C 및 C++ 코드를 혼합하는 것이 현명하지 않습니다. 이미 std::cin을 사용하고 있으며이를 고수하고 std::getline을 사용해보십시오. std::cinstd::getline을 섞으려고하면 같은 문제가 발생합니다. 하나 또는 다른 것을 고집하는 것이 좋습니다.

참고 : gets은 더 이상 사용되지 않습니다. C11과 C++ 14에서는 제거되었습니다. 대신 fgets을 사용하십시오.