На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> буффер клавиатуры , кто он и как до него добраться?! linux, g++
    Привет!

    ситуация: надо создать функцию зачитывания с клавиатуры. Казалось бы все элементарно!
    Сначала строка читается через scanf (но задается в конзоле намеренно даллее пробелла), на этом этапе все в порядке. Когда же потом на самом деле надо всю новую строку причитать, то выясняется, что буффер занят текстом, который в первом случае был после пробелла или просто \n.
    так вот, как зовут этот буффер клавиатуры?! и как его почистить?!
    я считала, что его зовут cin и чистила cin.clear() - оказалось, что это не то.

    fflush(stdin) не предлагать (работаю НЕ на solaris) :)
    Сообщение отредактировано: nastenka -
      Вот он - вред одновременного использования cin/cout с printf()/scanf()! В каждой же книжке написано - не юзать! Я что-то не понял, ты сначала считываешь строку(до пробелаи или \n) через scanf(), а потом-то как?
        я зню, что их мешать нельзя! но здесь именно по заданию надо!
        в общем мне надо аналог fflush...
        сейчас на остальные вопросы отвечу, надо кое-что попробовать...

        Добавлено
        в общем не в мешанине дело: сделала все в чистом С, но результат тот же.
        конкретизирую проблему: если приходится зачитывать через scanf, а пользователь задает не одно слово, а много, то вот эти "много слов" (кроме первого) где-то остаются в памяти и в следущий раз, когда надо подождать,что пользователь напечатает, то программа не ждет, а вытаскивает из памяти эти "много слов" и радуется тому, что выполнила задание :angry:
        как почистить память ?! :blink:

        Добавлено
        а scanf мне оooочень надо, т.к. в моя функция должна быть в последущем независимой от типа
        ExpandedWrap disabled
          int cTUIEingabe::Lese (char* maske, void* v) {
              return scanf (maske, v);
          }
        Сообщение отредактировано: nastenka -
          а почему fflush(stdin) не пойдет? оно ж ANSI C? или я чего-то не уловил?
            Слухай, а может быть тебе воспользоваться связкой fgets + sscanf? fgets'ом ты читаешь всю введенную пользователем строку, а sscanf'ом ее разбираешь на составные части.
              Цитата
              а почему fflush(stdin) не пойдет?


              машины другие :)
              он точно проходит на unix solaris, а в данный момент работаю на linux suse 9.1
              ну я уже даже и это попробовала, но и как ожидалa - не помогло :(
                а что ты в своей функции вообще хочешь сделать?
                  Цитата Flex Ferrum @
                  Слухай, а может быть тебе воспользоваться связкой fgets + sscanf? fgets'ом ты читаешь всю введенную пользователем строку, а sscanf'ом ее разбираешь на составные части.

                  попробую
                  а можно ли так перекрутить cin, чтобы он читал не
                  ExpandedWrap disabled
                    char c;
                    cin.get(c);

                  а любой независимый тип (не обязательно get©)?

                  -юсртыхэю
                  Цитата Konigsberg @
                  а что ты в своей функции вообще хочешь сделать?

                  одной - симулировать scanf, а второй всю строку читать, но проблема как раз-то в первой :(
                    Цитата nastenka @
                    а любой независимый тип (не обязательно get©)?

                    А чем оператор >> не удовлетворяет?
                      с утра меня это тем не устроило, что я у Стратострупа (надеюсь имя правильно написала) прочитала, что все-таки в такой форме лучше не использовать, т.к. есть опасность переполнения (если я не ошиблась, т.к. читала "на скорую руку"), а сейчас меня не устраивает тем, что я до содержания переменных не дохожу, буду искать ошибку
                      Сообщение отредактировано: nastenka -
                        Опасность переполнения буфера есть, если читать оператором >> в массив.
                          Цитата
                          Стратострупа

                          Не, он Страуструп (мертвый страус) :)
                            Посмотри функции fpurge и __fpurge.
                              Цитата nastenka @
                              что все-таки в такой форме лучше не использовать, т.к. есть опасность переполнения

                              Переполнения чего? Целого числа? Так от этого ты нигде не застрахована.
                              Цитата nastenka @
                              а сейчас меня не устраивает тем, что я до содержания переменных не дохожу, буду искать ошибку

                              Не понял фразы.
                                Цитата Relan @
                                __fpurge.

                                ты спас мою бессонную ночь :)
                                а я сначала с критикой к ней подошла, думала, такой же принцип как и в fflush, ан нет :)

                                Добавлено
                                всем огромно спасибо, а по поводу переполнения мне еще и самой подробнее почитать надо :)
                                Сообщение отредактировано: nastenka -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0368 ]   [ 15 queries used ]   [ Generated: 19.05.24, 09:10 GMT ]