2014-11-29 3 views
0

나는 아래이 InputText 기능과 같은 텍스트 입력 기능을 만들려고 노력하고있어 이후 생략됩니다됩니다. StackOverflow (cin.ignore() 또는 cin.clear()을 사용하여)를 통해이 문제를 연구했으며 올바른 대답과 설명을 찾을 수없는 것 같습니다. () 함수에서하는 두 번째 사용

Input text (Note: press Enter twice to finish input.) 
>I am Groot! 

You inputted : I am Groot! 
String length: 11 

Restart program? 
>y 

Input text (Note: press Enter twice to finish input.) 
> 
You inputted : 
String length: 0 

Restart program? 
> 

그래서 내 질문 : 어떻게 만들 않는 gets() 부분 여기에 내가 언급 한 문제, 프로그램 출력의 예입니다

#define pr_ cout<< 
#define in_ cin>> 

#include <iostream> 
#include <string.h> 
#include <stdio.h> 
using namespace std; 

char* InputText(char Dummy[256]); 

main() 
{ 
    char Quest; 
    do 
    { 
     char InputChar[256]; 
     int InputLength; 

     pr_ "\n Input text (Note: press Enter twice to finish input.)\n >"; 
     InputText(InputChar); 

     InputLength=strlen(InputChar); 

     pr_ "\n You inputted : "<<InputChar; 
     pr_ "\n String length: "<<InputLength; 
     do 
     { 
      pr_ "\n\n Restart program?\n >"; 
      in_ Quest; 
      if(Quest!='y' && Quest!='Y' && Quest!='n' && Quest!='N') 
      pr_ " System error: not an answer."; 
     } 
     while(Quest!='y' && Quest!='Y' && Quest!='n' && Quest!='N'); 
    } 
    while(Quest=='y' || Quest=='Y'); 
} 

char* InputText(char Dummy[256]) 
{ 
    gets(Dummy); 
    return Dummy; 
} 

:

여기 함수에 대한 내 프로그램입니다 건너 뛰지 않는 건가요? 죄송합니다.이 질문에 다시 답하십시오.

UPDATE 1 : R Sahu의 대답에서, 지금 fgets()을 사용하고 있습니다. 하지만 여전히 건너 뜁니다. 나를 위해

do 
    { 
     pr_ "\n\n Restart program?\n >"; 
     in_ Quest; 
     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
     if(Quest!='y' && Quest!='Y' && Quest!='n' && Quest!='N') 
     pr_ " System error: not an answer."; 
    } 

작품을 사용

+0

진짜 질문은 왜 당신이'gets '를 사용하고 있는가하는 것입니다. 가장 최신 버전의 표준에도 존재하지 않습니다. – chris

+0

재미있는 매크로. 아니 정말. –

+0

@chris 이제'fgets()'를 사용하고 있지만 여전히 건너 뜁니다. – Griko

답변

0

. 주의

단어 :

gets를 사용하지 마십시오. 보안 문제의 근원입니다. 대신 fgets을 사용하십시오. Why is the gets function so dangerous that it should not be used?을 참조하십시오.

+0

아니, 그 부분이 아니야. 'InputText' 함수에 대해 묻습니다, "Restart program?" 부품에는 문제가 없습니다. – Griko

+0

'cin.ingore' 라인이 없으면'\ n '이 스트림에 남습니다. 'gets()'를 호출하면 빈 줄이 반환됩니다. –