holic512 2022-10-12 00:23 采纳率: 77.8%
浏览 108
已结题

c语言如何限制时间循环

问题遇到的现象和发生背景
想要用c语言写一款带有限制时间功能的猜数字游戏
也就是开始游戏后给规定时间进行猜
超过时间自动结束游戏

我的解答思路和尝试过的方法
我起初以为是用clock但是那个只能用来计算用时没法限制时间
不清楚是否需要多线程运作

我想要达到的结果
在一个while循环中一直猜数
当给的限制时间结束时 循环终止

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-10-12 04:30
    关注
    #include <thread>
    #include <iostream>
    #include <future>
    #include <chrono>
    #include <random>
    #include <string>
    #include <sstream>
    
    bool guess_numbers(std::pair<int, int> range, int answer)
    {
        std::string line;
        int num;
        while (std::cout << ">>> " && std::getline(std::cin, line))
        {
            std::istringstream ss(line);
            if ((ss >> num) && num == answer)
            {
                std::cout << "You won. The answer is " << answer << '\n';
                return true;
            }
            else
            {
                std::cout << "Wrong answer. Please try again.\n";
            }
        }
        return false;
    }
    
    int main()
    {
        auto range = std::make_pair(0, 20);
        std::chrono::seconds timeout(5);
    
        std::cout << "Guess a number between [" << range.first << ", " << range.second << "] in " << timeout.count() << " seconds:\n";
    
        std::random_device rd;
        std::mt19937 gen(rd());
        std::uniform_int_distribution<> distrib(range.first, range.second);
        auto answer = distrib(gen);
    
        std::future<bool> future = std::async(guess_numbers, range, answer);
        if (future.wait_for(timeout) != std::future_status::ready)
            std::cout << "\nTime out. You lose. The answer is " << answer << '\n';
    
        exit(0);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 修改了问题 10月12日
  • 创建了问题 10月12日