- Как сделать, чтобы getchar не выдавал символ обратно, pavlinux, 00:00 , 10-Июн-11 (1)
> Добрый день! > Вопрос, наверное, ламерский, но все же, подскажите. > Обращаюсь с функции getchar(), а на экран при этом выаодится нажатый символ. Кривой у вас что-то, getchar не занимается выводом на экран.
- Как сделать, чтобы getchar не выдавал символ обратно, vtuj, 17:23 , 10-Июн-11 (2)
>> Добрый день! >> Вопрос, наверное, ламерский, но все же, подскажите. >> Обращаюсь с функции getchar(), а на экран при этом выаодится нажатый символ. > Кривой у вас что-то, getchar не занимается выводом на экран.Может быть и кривой Freebsd 8.2 gcc Вот текст программы: ---------------------------------- #include <stdio.h> int main () { char buf [256]; int ch, pnt; pnt = 0; while ((ch = getchar()) != EOF) { buf [pnt] = ch + 1; if (ch == 10) { buf [pnt] = 0; puts (buf); pnt = 0; } else pnt ++; } } --------------------------------------- Если после запуска программы ввожу с клавиатуры 12345 то на экране будут две строки 12345 23456 Проясните, пожалуйста, откуда берется строка 12345 ведь, едиственный оператор вывода это pus (buf), который выводит строку 23456 Поэтому делаю вывод, что при нажатии клавиши на stdout сразу же выводится введенный символ. Вопрос, как это подавить?
- Как сделать, чтобы getchar не выдавал символ обратно, pavlinux, 17:43 , 10-Июн-11 (3)
>[оверквотинг удален] > { buf [pnt] = ch + 1; > if (ch == 10) > { buf [pnt] = 0; > puts (buf); > pnt = 0; > } > else pnt ++; > } > } > --------------------------------------- puts (buf); - вот он гад >[оверквотинг удален] > то на экране будут две строки > 12345 > 23456 > Проясните, пожалуйста, откуда берется строка > 12345 > ведь, едиственный оператор вывода это pus (buf), который выводит строку > 23456 > Поэтому делаю вывод, что при нажатии клавиши на stdout сразу же выводится > введенный символ. > Вопрос, как это подавить?
Не выводить на stdout!!!
- Как сделать, чтобы getchar не выдавал символ обратно, vtuj, 17:49 , 10-Июн-11 (4)
>[оверквотинг удален] >> то на экране будут две строки >> 12345 >> 23456 >> Проясните, пожалуйста, откуда берется строка >> 12345 >> ведь, едиственный оператор вывода это pus (buf), который выводит строку >> 23456 >> Поэтому делаю вывод, что при нажатии клавиши на stdout сразу же выводится >> введенный символ. >> Вопрос, как это подавить?В смысле виноват puts?
- Как сделать, чтобы getchar не выдавал символ обратно, pavlinux, 18:05 , 10-Июн-11 (5)
>[оверквотинг удален] >>> 12345 >>> 23456 >>> Проясните, пожалуйста, откуда берется строка >>> 12345 >>> ведь, едиственный оператор вывода это pus (buf), который выводит строку >>> 23456 >>> Поэтому делаю вывод, что при нажатии клавиши на stdout сразу же выводится >>> введенный символ. >>> Вопрос, как это подавить? > В смысле виноват puts?Ну что значит виноват, у него миссия такая - выводить на stdout, от начала адреса указываемое в аргументе. if (ch == 10) - ждет кода 0x0A, он жe LF, он же '\n', он же ENTER
- Как сделать, чтобы getchar не выдавал символ обратно, Вова, 18:05 , 10-Июн-11 (6)
> Добрый день! > Вопрос, наверное, ламерский, но все же, подскажите. > Обращаюсь с функции getchar(), а на экран при этом выаодится нажатый символ. > Надо, чтобы он не выводился, как, если бы мне надо было > ввести пароль. Но идея состоит не в этом, просто у меня > stdin и stdout связаны с com портом, а конкретнее, с модемом. > Получается, что все символы, приходящие от удаленного модема возвращаются ему назад. > А это для меня плохо. > Может кто знает, как сделать такое? struct termios settings; tcgetattr(0, &settings); //не отображаем введённые символы settings.c_lflag &= ~ECHO; //не ждём нажатия интер settings.c_lflag &= ~ICANON; tcsetattr(0, TCSANOW, &settings);
- Как сделать, чтобы getchar не выдавал символ обратно, vtuj, 18:28 , 10-Июн-11 (7)
>[оверквотинг удален] >> Получается, что все символы, приходящие от удаленного модема возвращаются ему назад. >> А это для меня плохо. >> Может кто знает, как сделать такое? > struct termios settings; > tcgetattr(0, &settings); > //не отображаем введённые символы > settings.c_lflag &= ~ECHO; > //не ждём нажатия интер > settings.c_lflag &= ~ICANON; > tcsetattr(0, TCSANOW, &settings); Спасибо, сейчас попробую! А на версию с puts приготовил программу другую --------------------------------------------------- #include <stdio.h> int main () { char buf [256]; int ch, pnt; FILE *fl; fl = fopen ("qq", "w"); pnt = 0; while ((ch = getchar()) != EOF) { buf [pnt] = ch + 1; if (ch == 10) break; pnt ++; } buf [pnt] = 0; fputs (buf, fl); fclose (fl); } --------------------------------------------------- В ней нет puts, а есть fputs, а эффект тот же.
- Как сделать, чтобы getchar не выдавал символ обратно, pavlinux, 18:34 , 10-Июн-11 (8)
> а эффект тот же.# echo "1111" | ./a.out # cat qq 2222 нету эффекта ----- Можно вопрос: Напурква нужно buf[pnt] = ch + 1;
- Как сделать, чтобы getchar не выдавал символ обратно, vtuj, 18:44 , 10-Июн-11 (9)
> Можно вопрос: Напурква нужно buf[pnt] = ch + 1; А для того, чтобы различать, что ввожу,а что вывожу Всем большое спасибо за помощь. Все получилось с tcgetattr и tcsetattr. А то замучился фильтровать сообщения, ведь я работал не с клавиатуры,а через модем с удаленным сервером.
|