Я пытаюсь сделать функцию ввода текста, как это 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()
, Но это все еще пропущено.
С помощью
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 так опасна, что ее нельзя использовать?.