• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Как Сделать, Чтобы, При Вводе В Консоли, Нажатие <enter> Не Пер

  • Автор темы alsav22
  • Дата начала
A

alsav22

Есть некий ввод символов, организованный через cin.get(char &), или через cin.get(char &, int), или через cin.getline(char &, int). Выведена на консоль, например, фраза: "Введите то-то: ". Дальше мигает курсор (приглашение на ввод). Если вводится не то, что нужно, то на следующей строке выводится то же:"Введите то-то: " и курсор на ввод. Всё получается кроме одного: если просто нажать <Enter>, то курсор на ввод переходит на начало следующей строки. Как сделать чтобы этого не происходило? То есть, при нажатии на <Enter>, или курсор оставался на том же месте, или на следующей строке выводилось то же : "Введите то-то: " и курсор на ввод.
 
I

ixoyz

Тут нужно использовать иной оператор ввода, не cin и не scanf("%s",...).
Я когда-то в студенчестве писал ввод на основе scanf("%с",...) и даже кажется его нашёл:
C++:
	printf("Введите %s: ", *q[k]);
i = 0;
do
{scanf("%c", &d[i++]);
if (i == ld)
{db = new char[ld];
for(j = 0; j < ld; j++)
db[j] = d[j];
delete d;
d = new char [ld * 2];
for(j = 0; j < ld; j++)
d[j] = db[j];
ld *= 2;
delete db;
}
}
while(d[i - 1] != 0x0A);
d[i - 1] = 0;
 
R

rrrFer

Код:
#include <iostream>
void enter( char *s ) {
int i;
for( i = 0;;i ++ ) {
s[ i ] = std ::cin .get();
if( s[ i ] == 10 )
break;
}
s[i] = 0;
}
int main(){

char *s = new char[ 10 ];

do {
std ::cout << "hello world: ";
enter( s );
std ::cout << s << std ::endl;
} while( strcmp( "bb", s ) );

delete[] s;

return 0;
}
 
A

alsav22

Код:
#include <iostream>
void enter( char *s ) {
int i;
for( i = 0;;i ++ ) {
s[ i ] = std ::cin .get();
if( s[ i ] == 10 )
break;
}
s[i] = 0;
}
int main(){

char *s = new char[ 10 ];

do {
std ::cout << "hello world: ";
enter( s );
std ::cout << s << std ::endl;
} while( strcmp( "bb", s ) );

delete[] s;

return 0;
}

Благодарю!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!