powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / То же, что и gets, только без эха?
18 сообщений из 18, страница 1 из 1
То же, что и gets, только без эха?
    #33555196
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как мне реализовать Subj на этом: КомпиляторMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

Заранее благодарен.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555413
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_getch() в цикле?
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555448
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gradient
Прошу прощенья за такие вопросы но пока совсем новичёк:
условие выхода из цикла?
как собрать символы в строку?
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555467
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Геннадичусловие выхода из цикла?А какое надо? Например, ввод Enter (символ с кодом 13), либо заполнение буфера из 20 символов...
Если по аналогии с gets , то enter.

Геннадичкак собрать символы в строку?Самое "незаморочное" - использовать std::string.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555501
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, так:
Код: plaintext
#include <conio.h>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
	std::string ts;
	int tch;

	while ((tch = _getch()) !=  13 ) ts += (char) tch;

	std::cout << ts.c_str() << std::endl;

	_getch();
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555513
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Геннадич2 Gradient
Прошу прощенья за такие вопросы но пока совсем новичёк:
условие выхода из цикла?
как собрать символы в строку?
Них... не понял. Наверное так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#define MAX_LEN  1024 
char str[MAX_LEN];
int pos =  0 ;
while ()
{
      if ((str[pos++] = (char)getch())== '\r')
           break;      
}
str[pos -  1 ] = '\0';
printf(str);
Извиняюсь, если, что за очепятки.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555519
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Балтика Геннадич2 Gradient
Прошу прощенья за такие вопросы но пока совсем новичёк:
условие выхода из цикла?
как собрать символы в строку?
Них... не понял. Наверное так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#define MAX_LEN  1024 
char str[MAX_LEN];
int pos =  0 ;
while ()
{
      if ((str[pos++] = (char)getch())== '\r')
           break;      
}
str[pos -  1 ] = '\0';
printf(str);
Извиняюсь, если, что за очепятки.
В while TRUE конечно должно быть.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555544
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#define MAX_LEN  1024 
char str[MAX_LEN];
int pos =  0 ;
do
     str[pos] = (char)getch();
while (str[pos++] != '\r')
str[pos -  1 ] = '\0';
printf(str);
Так наверное лучше будет.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555594
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
char* gf_getpassw()
{
char str[ 80 ];
char* res;
int pos =  0 ;

for (pos =  0 ; ; pos++)
{
      if ((str[pos] = (char)getch())== '\r')
           break;      
}
str[pos] = '\0';
res = (char*) str;
return(res);
}
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555699
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы в цикле условие добавил pos < 80 (а если пользователь введет больше? - прога завалится)

И вообще как-то напррягает работать с буферами фиксированного объема - постоянно надо следить, чтобы за границы не выйти... уж лучше сразу либо свой класс писать, либо пользоваться std::string каким-нибудь.

Понятно, что удобнее для примера написать char buf[100] , но почему бы сразу "как надо" не учиться.

В общем - если учишься на примерах с фиксированным буфером - учись сразу обрабатывать такие ситуации, как возможный выход за его границы.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555724
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gradient
Спасибо, учту.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33555754
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GradientЯ бы в цикле условие добавил pos < 80 (а если пользователь введет больше? - прога завалится)

И вообще как-то напррягает работать с буферами фиксированного объема - постоянно надо следить, чтобы за границы не выйти... уж лучше сразу либо свой класс писать, либо пользоваться std::string каким-нибудь.

Понятно, что удобнее для примера написать char buf[100] , но почему бы сразу "как надо" не учиться.

В общем - если учишься на примерах с фиксированным буфером - учись сразу обрабатывать такие ситуации, как возможный выход за его границы.
Так и надо учится!!!
Стека не жалко. А уж алок - это на крайний случай. Если хотите
Код: plaintext
#define MAX_LEN ( 1024  *  512 )
и будет пользователю счастье.
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33559350
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GradientПонятно, что удобнее для примера написать char buf[100] , но почему бы сразу "как надо" не учиться.Ты считаешь что использовать _getch() в сочетании с std::string это "как надо"???
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33560019
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТы считаешь что использовать _getch() в сочетании с std::string это "как надо"???Нет. Но imho так получше. С удовольствием узнаю как действительно надо: красиво и компактно.

А _getch(), вроде, gjyjdtt/получше чем getch()...
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33560073
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в прошлом посту: "поновее/получше". Неявно сформулированный вопрос следует понимать: "А как через cin реализовать поведение, аналогичное getch()?"

P.S. жаль, что сообщения нельзя исправлять...
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33561574
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
getch() от _getch() вообще-то ничем не отличается.
В борландовском conio.h вообще есть строка:
Код: plaintext
__inline int _getch( void ) { return getch(); } /* for MSC compatibility */
_getch() сделана только для того чтобы не заставлять юзера использовать extern "C" при вызове стандартных процедур из сишной библиотеки при работе в С++.
По хорошему, если пишешь на С++, то и использовать надо cin и только cin. А чтобы при этом повторить функциональность kbhit()/getch()/ungetch() порождаешь собственный класс потомок IO_istream и в нем делаешь все необходимые донастройки :)
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33565133
Gradient
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПо хорошему, если пишешь на С++, то и использовать надо cin и только cin.Тут я согласен. Только у меня что-то не получается. В смысле, получается что-то вроде
Код: plaintext
1.
char ch;
cin.read(&ch,  1 );
Но подобные конструкции "начинают что-то видеть" только после нажатия Enter.

White OwlА чтобы при этом повторить функциональность kbhit()/getch()/ungetch() порождаешь собственный класс потомок IO_istream и в нем делаешь все необходимые донастройки :)Но ведь правильно инициализированный cin уже есть и его не изменить. Или имеется в виду сделать потомка от istream, а потом потомок=cin и работать с потомком?
...
Рейтинг: 0 / 0
То же, что и gets, только без эха?
    #33568999
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GradientНо ведь правильно инициализированный cin уже есть и его не изменить. Или имеется в виду сделать потомка от istream, а потом потомок=cin и работать с потомком?Именно это и имелось в виду. cin/cout это только реализация терминала. Чтобы из терминала сделать консоль нужно слегка повозиться. Но обычно С++ программы работают с GUI, им консоль до лампочки :)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / То же, что и gets, только без эха?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]