나는 아래이 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.";
}
작품을 사용
진짜 질문은 왜 당신이'gets '를 사용하고 있는가하는 것입니다. 가장 최신 버전의 표준에도 존재하지 않습니다. – chris
재미있는 매크로. 아니 정말. –
@chris 이제'fgets()'를 사용하고 있지만 여전히 건너 뜁니다. – Griko