The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как сделать, чтобы getchar не выдавал символ обратно, !*! vtuj, 09-Июн-11, 20:03  [смотреть все]
Добрый день!
Вопрос, наверное, ламерский, но все же, подскажите.
Обращаюсь с функции getchar(), а на экран при этом выаодится нажатый символ. Надо, чтобы он не выводился, как, если бы мне надо было ввести пароль. Но идея состоит не в этом, просто у меня stdin и stdout связаны с com портом, а конкретнее, с модемом. Получается, что все символы, приходящие от удаленного модема возвращаются ему назад. А это для меня плохо.
Может кто знает, как сделать такое?
  • Как сделать, чтобы 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, а эффект тот же.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру