Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Зацыкливание вместо выхода из цыкла.


Автор: Killer_13 22.4.2010, 19:51
Простой у меня вопрос.
Вот небольшой примерчик.
По нажатию на клавишу "х", - должен быть выход из программы, а почему-то получается зацыклывание.
Посмотрел в книге - у меня код 1 в 1 сходится, что я начудил?

Спасибо!
 smile 

Код

int main()
{

    int b,exp;

    char x;

    while(true){
        if(cin>>b && cin>>exp)
            cout<<b<<"\n"<<exp<<endl;

        cout<<"\n Noch Mal?>"<<endl;

        cin.get(x);
        if(x == 'x')
            break;
        cin.sync();
    }

    return 0;
}


Автор: jonie 22.4.2010, 20:21
потому что в x у вас будет перевод каретки (он не попадает в cin>>, а остается в буфере, который и считывает cin.get). Чтобы поправить ситуацию можно сбросить кеш используя cin.sync(); либо std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' ); либо flushall(); передcin.get().

Знающие люди подскажут чем способы отличаются... я использую sync ... 

Автор: Killer_13 22.4.2010, 20:35
Хмм, так как поправить в моем случае?
Если вы заметили 
cin.sync();

у меня стоит после 

cin.get

пробовал ставить и перед, никаких изменений, 
поставил перед

cin.get

flushall();

Никаких изменений.

Я приблизительно понимаю о чем вы, читал о этом.
Но чтоб работало почему то исправить не получается.
Спасибо.

Автор: toxx 22.4.2010, 21:18
Код

#include <iostream>
using namespace std;
int main()
{
    int b,exp;
    char x;
    while(true){
        if(cin>>b && cin>>exp)
            cout<<b<<"\n"<<exp<<endl;
        cout<<"\n Noch Mal?>"<<endl;
        cin.get();
        cin.get(x);
        if(x == 'x')
            break;
        cin.sync();
    }
    return 0;
}

А если так попробовать?

Автор: Killer_13 22.4.2010, 21:28
И так не работает?

Странно, ведь в книге такой пример, - почему он не работает? :(:(:(

Автор: toxx 22.4.2010, 21:30
Killer_13
Странно у меня вышел=)я правильно вводил? http://www.valar.ru/gallery/0410/312.jpg

Автор: Killer_13 22.4.2010, 21:38
Да, но программа после первого цыкла начинает работать неправильно, - тогда нужно вводить 3 числа!
Если первый раз, работатет правильно, - если во второй раз, уже нужно вводить 3 числа. Так быить не должно... 

Автор: toxx 23.4.2010, 13:03
Killer_13
попробуйте ещё так
Код

cin.clear();
cin.get(x);


Автор: Killer_13 23.4.2010, 13:25
Там путаница какая то получается, - после запроса ввести еще раз вводит и выводит, но в цыкл наверх не идет.
Если нажать х, тогда прокручивает цыкл еще раз, с какой то радости, - нужно разобраться...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)