2016-02-02 3 views
0

Я пытаюсь что-то вроде этого. Он подсчитывает секунды с 5-1.Как разбить петлю с использованием пользовательского ввода?

#include<iostream> 
#include<stdlib.h> 
#include<windows.h> 
#include<iomanip> 
using namespace std; 

int main() 
{ 
    for(int i=5;i>0;i--) 
    { 
    cout<<"\n\n\n\n\n\n"; 
    cout<<setw(35); 
    cout<<i; 
    Sleep(1000); 
    system("CLS"); 
    } 
    system("PAUSE"); 
} 

И я пытаюсь выяснить способ разбить цикл, используя пользовательский ввод (с клавиатуры), чтобы сломать его во время его работы. Я не знаю, как это сделать. Я слышал о многопоточности. Я даже не знаю, имеет ли многопоточность какое-либо приложение в моей ситуации или нет. Есть ли какие-либо идеи о том, как разбить его в середине при выполнении цикла?

+0

Используйте время цикла и проверки для cin в конце цикла. –

+0

Не могли бы вы рассказать о проверке cin? – anjanik012

+1

Это может быть полезно для вас. [C + +, пользовательский ввод в реальном времени, во время цикла Loop] (http://stackoverflow.com/questions/19074646/c-real-time-user-input-during-while-loop) –

ответ

0
  • Попробуйте это:

    #include<iostream> 
    using namespace std; 
    int main() 
    { 
        int i = 1; 
        while(i) 
        { 
        // do your work here 
        cin>>i; 
        } 
        cout<<"Terminated"<<endl; 
    } 
    

    Продолжить сканирование INT I, когда вы хотите разорвать петлю дать 0 в качестве входного значения и ваш цикл будет terminatd.

+0

. Вопросы касаются того, как определять пользовательский ввод от пользователя при отображении значений в цикле (и выходить из цикла при некоторых условиях ввода), а не как собирать входные данные от пользователя в цикле. – crashmstr

+0

Я думаю, что anjanik012 inly хочет разорвать цикл, как он упомянул в комментарии –

+0

Да, он хочет разбить цикл, пока * покажет * 'i', а не получая вход для' i' (или даже останавливаясь для ввода пользователем, следовательно, почему потоки было упомянуто). Очень разные. – crashmstr

0

Думаю, вам понадобится нитка для этого.

Добавить глобальную переменную в ваш основной цикл, использовать поток для ввода ввода командной строки и изменения вашей глобальной переменной.

объявить глобальную переменную

bool stop = false; 

создать поток для чтения стандартного ввода и изменения 'стоп'

DWORD WINAPI thread1(LPVOID pm) 
{ 
    //check the getchar value 
    int a = getchar(); 
    while (a != '0'){ 
     a = getchar(); 
    } 
    stop = true; 
    return 0; 
} 

в главном:

HANDLE handle = CreateThread(NULL, 0, thread1, NULL, 0, NULL); 
for(int i=5;i>0 && !stop;i--) 
    { 
    cout<<"\n\n\n\n\n\n"; 
    cout<<setw(35); 
    cout<<i; 
    Sleep(1000); 
    system("CLS"); 
    } 
+0

Мне удалось создать поток, используя предложения, но я все еще не смог вырваться из цикла. – anjanik012

+0

Вы можете установить глобальную переменную? как ваше условие цикла? установите точку останова, чтобы увидеть, где остановлена ​​программа. – LKW

+0

Я думаю, что цикл while в функции thread1 не прерывается, и остановка не обновляется. Я пытался несколько способов сломать его, когда он обновляется, но не может этого сделать. – anjanik012

Смежные вопросы