get () в функции пропускается после второго использования

Я пытаюсь сделать функцию ввода текста, как это InputText функция ниже:

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

Но когда функция вызывается снова, gets(Dummy) пропустить. Я исследовал эту проблему через StackOverflow (используя cin.ignore() или же cin.clear()) и я не могу найти правильный ответ и объяснение.

Вот моя программа для функции:

#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;
}

Вот пример вывода программы с упомянутой проблемой:

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() часть не пропускается? Извините, если я повторно задал этот вопрос.

ОБНОВЛЕНИЕ 1: От Р Сахуответ, я сейчас использую fgets(), Но это все еще пропущено.

0

Решение

С помощью

    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, Это источник проблем безопасности. использование fgets вместо. Увидеть Почему функция get так опасна, что ее нельзя использовать?.

0

Другие решения


По вопросам рекламы [email protected]