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

alsav22

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

ixoyz

Member
12.05.2012
16
0
#2
Тут нужно использовать иной оператор ввода, не 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

Гость
#3
Код:
#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;
}