Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2012, 23:26   #21
Alex-Kunfuman
Пользователь
 
Регистрация: 19.01.2012
Сообщений: 20
По умолчанию

scanf("%c", &simbol);
printf("%d",(int)simbol);
Я не совсем пойму зачем эти 2 строки необходимы?...Просто я протестировал программу потом так,как _Bers показал, и заработало уже нормально,без проблем...
Alex-Kunfuman вне форума Ответить с цитированием
Старый 19.01.2012, 23:27   #22
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну да, странное решение..помоему лучше ж бы учли просто разные символы(хотя универсал написать очень просто, у самого код лежит)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2012, 23:29   #23
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Я не совсем пойму зачем эти 2 строки необходимы?...Просто я протестировал программу потом так,как _Bers показал, и заработало уже нормально,без проблем...
ТС, это не вам, это часть нашего потрошения stdio
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2012, 23:46   #24
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Вот ещё интересная особенность:

Если скормить std::cin 13 символ, то он скушает даже пустую строчку.

Если скормить std::cin 10 символ, то он скушает только, если строка не пустая.

То есть, если нажимать интер ничего не введя - он не отвянет, будет просить, пока ему что нибудь не дадут. Один символ из '\n' он за строку типа не считает.

Но если при нажатии ентер, ему пульнуть 13 символ - сразу отстанет))


Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
попадает 13 и 10(от одной клавиши), но ввод заканчивается при попадании 13, а 10 остается на потом.
Не совсем понятно, чего когда попадает)

Последний раз редактировалось _Bers; 19.01.2012 в 23:49.
_Bers вне форума Ответить с цитированием
Старый 19.01.2012, 23:54   #25
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Не совсем понятно, чего когда попадает)
видимо проявление этой странной особености%).
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2012, 23:59   #26
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Внесу свои 5 копеек: аналогичные проблемы есть и у Паскаля, если использовать read, а не readln
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 22.01.2012, 02:47   #27
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение

Я сделал сброс буффера перед тем как читать очередную клавишу, и все заработало.

Но это только мои домыслы. Например, не понятно, а почему такого глюка не было, когда ты второе число float с клавиатуры вводил?
Если перед вводом символа вводилось что-либо другого типа, то перед вводом символьного типа необходимо очистить буфер клавиатуры с помощью функции fflush(stdin);
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 22.01.2012, 02:55   #28
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ArmanPrestige Посмотреть сообщение
Если перед вводом символа вводилось что-либо другого типа, то перед вводом символьного типа необходимо очистить буфер клавиатуры с помощью функции fflush(stdin);
Ты не прав, и этот код наглядно это демонстрирует:


#include <stdio.h>
#include <conio.h>

Код:
int main()
{     
    float  a, b, c;
    char simbol;
    printf("Vvedite 1-oe cislo : ");
    scanf("%f", &a);
    printf("Vvedite 2-oe cislo : ");
    scanf("%f", &b);
    printf("Vvedite arifmeticheskii simvol : ");

    fflush(stdin);         // <---  сбросим содержимое буффера ввода, что б там ничего не было. 
    //И тогда нижеследующая инструкция вынудит устройство ввода ожидать новые данные
    scanf("%c", &simbol);  // <---  читает из буффера ввода 1 символ. 
    scanf("%c", &simbol);  // <---  Осечка. Считается '\n' попавший в буфер от предыдущего ввода. 
                                   //Пользователю даже предложено не будет ничего вводить.
    switch(simbol)
    {
    case '+' : c = a + b; break;
    case '-' : c = a - b; break;
    case '*' : c = a * b; break;
    case '/' : c = a / b; break;
    default  : c = 0; break;
    }
    printf("Resultat : %f \n", c);
    getch(); 
}
_Bers вне форума Ответить с цитированием
Старый 22.01.2012, 04:42   #29
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Ты не прав, и этот код наглядно это демонстрирует:
если добавить между scanf("%c") еще fflush(stdin); то все будет нормально. получается что перед каждым вводом символьного типа надо чистить буфер(если ранее что-то вводилось)
Я могу, Я хочу, Я буду!

Последний раз редактировалось ArmanPrestige; 22.01.2012 в 05:00.
ArmanPrestige вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ оператор switch Pingvinenok_Lolo Помощь студентам 4 05.12.2011 23:11
оператор switch aank10 Общие вопросы C/C++ 3 01.06.2011 10:28
оператор выбора Switch Fornarina Общие вопросы C/C++ 1 31.10.2010 12:56
Оператор выбора switch(C++) michal3003 Помощь студентам 2 06.09.2010 02:05
Оператор switch. IgorArhangel Помощь студентам 4 16.01.2009 01:53