【问题标题】:How to break the loop using user input?如何使用用户输入打破循环?
【发布时间】:2016-02-02 04:02:23
【问题描述】:

我正在尝试这样的事情。它从 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");
}

我试图找出一种方法来打破循环,使用用户输入(从键盘)在它运行时打破它。我不知道如何做到这一点。我听说过多线程。我什至不知道多线程在我的情况下是否有任何应用程序。那么关于如何在执行循环时中断它的任何想法?

【问题讨论】:

  • 使用 while 循环并在循环结束时检查 cin。
  • 能否详细说明检查cin?
  • 这可能对您有帮助。 C++, Real-Time User Input, during While Loop
  • @Wai Yan 对不起,但我无法理解您提供的参考答案中发生了什么。
  • 请在您的问题中更具体。您是否只想检查用户是否在循环结束时按下了某个键,如果是,则中断?或者你也想打断你的sleep

标签: c++


【解决方案1】:

我认为你需要一个线程来完成它。

在主循环中添加一个全局变量, 使用线程接收命令行输入并修改您的全局变量。

声明一个全局变量

bool stop = false;

创建一个线程来读取标准输入并修改'stop'

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");
  }

【讨论】:

  • 多亏了这一点,我能够通过使用建议来创建一个线程,但我仍然无法跳出循环。
  • 能成功设置全局变量吗?你的循环条件如何?设置一个断点来查看程序在哪里停止。
  • 我认为 thread1 函数中的 while 循环没有中断并且 stop 没有被更新。我尝试了一些方法来打破它,当 a 被更新但无法做到。
  • 听起来你的 'stop' 没有声明为全局变量。无论如何,我认为你应该首先学习线程,参见tutorialspoint.com/cplusplus/cpp_multithreading.htm
【解决方案2】:
  • 试试这个:

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

    继续扫描 int i,当你想中断循环时,输入 0 作为输入值,你的循环将被终止。

【讨论】:

  • 问题是关于如何在循环中显示值时检测用户的用户输入(并在某些输入条件下跳出循环),而不是如何在循环中收集用户的输入.
  • 我认为 anjanik012 只是想打破他在评论中提到的循环
  • 是的,他想在 显示 i 时打破循环,而不是在获得i 的输入时(甚至停止用户输入,因此为什么提到线程)。非常不同。
猜你喜欢
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多