Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.133.205] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Привет!
ситуация: надо создать функцию зачитывания с клавиатуры. Казалось бы все элементарно! Сначала строка читается через scanf (но задается в конзоле намеренно даллее пробелла), на этом этапе все в порядке. Когда же потом на самом деле надо всю новую строку причитать, то выясняется, что буффер занят текстом, который в первом случае был после пробелла или просто \n. так вот, как зовут этот буффер клавиатуры?! и как его почистить?! я считала, что его зовут cin и чистила cin.clear() - оказалось, что это не то. fflush(stdin) не предлагать (работаю НЕ на solaris) |
Сообщ.
#2
,
|
|
|
Вот он - вред одновременного использования cin/cout с printf()/scanf()! В каждой же книжке написано - не юзать! Я что-то не понял, ты сначала считываешь строку(до пробелаи или \n) через scanf(), а потом-то как?
|
Сообщ.
#3
,
|
|
|
я зню, что их мешать нельзя! но здесь именно по заданию надо!
в общем мне надо аналог fflush... сейчас на остальные вопросы отвечу, надо кое-что попробовать... Добавлено в общем не в мешанине дело: сделала все в чистом С, но результат тот же. конкретизирую проблему: если приходится зачитывать через scanf, а пользователь задает не одно слово, а много, то вот эти "много слов" (кроме первого) где-то остаются в памяти и в следущий раз, когда надо подождать,что пользователь напечатает, то программа не ждет, а вытаскивает из памяти эти "много слов" и радуется тому, что выполнила задание как почистить память ?! Добавлено а scanf мне оooочень надо, т.к. в моя функция должна быть в последущем независимой от типа int cTUIEingabe::Lese (char* maske, void* v) { return scanf (maske, v); } |
Сообщ.
#4
,
|
|
|
а почему fflush(stdin) не пойдет? оно ж ANSI C? или я чего-то не уловил?
|
Сообщ.
#5
,
|
|
|
Слухай, а может быть тебе воспользоваться связкой fgets + sscanf? fgets'ом ты читаешь всю введенную пользователем строку, а sscanf'ом ее разбираешь на составные части.
|
Сообщ.
#6
,
|
|
|
Цитата а почему fflush(stdin) не пойдет? машины другие он точно проходит на unix solaris, а в данный момент работаю на linux suse 9.1 ну я уже даже и это попробовала, но и как ожидалa - не помогло |
Сообщ.
#7
,
|
|
|
а что ты в своей функции вообще хочешь сделать?
|
Сообщ.
#8
,
|
|
|
Цитата Flex Ferrum @ Слухай, а может быть тебе воспользоваться связкой fgets + sscanf? fgets'ом ты читаешь всю введенную пользователем строку, а sscanf'ом ее разбираешь на составные части. попробую а можно ли так перекрутить cin, чтобы он читал не char c; cin.get(c); а любой независимый тип (не обязательно get©)? -юсртыхэю Цитата Konigsberg @ а что ты в своей функции вообще хочешь сделать? одной - симулировать scanf, а второй всю строку читать, но проблема как раз-то в первой |
Сообщ.
#9
,
|
|
|
Цитата nastenka @ а любой независимый тип (не обязательно get©)? А чем оператор >> не удовлетворяет? |
Сообщ.
#10
,
|
|
|
с утра меня это тем не устроило, что я у Стратострупа (надеюсь имя правильно написала) прочитала, что все-таки в такой форме лучше не использовать, т.к. есть опасность переполнения (если я не ошиблась, т.к. читала "на скорую руку"), а сейчас меня не устраивает тем, что я до содержания переменных не дохожу, буду искать ошибку
|
Сообщ.
#11
,
|
|
|
Опасность переполнения буфера есть, если читать оператором >> в массив.
|
Сообщ.
#12
,
|
|
|
Цитата Стратострупа Не, он Страуструп (мертвый страус) :) |
Сообщ.
#13
,
|
|
|
Посмотри функции fpurge и __fpurge.
|
Сообщ.
#14
,
|
|
|
Цитата nastenka @ что все-таки в такой форме лучше не использовать, т.к. есть опасность переполнения Переполнения чего? Целого числа? Так от этого ты нигде не застрахована. Цитата nastenka @ а сейчас меня не устраивает тем, что я до содержания переменных не дохожу, буду искать ошибку Не понял фразы. |
Сообщ.
#15
,
|
|
|
Цитата Relan @ __fpurge. ты спас мою бессонную ночь а я сначала с критикой к ней подошла, думала, такой же принцип как и в fflush, ан нет Добавлено всем огромно спасибо, а по поводу переполнения мне еще и самой подробнее почитать надо |