online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
#include <cstdlib> #include <iostream> #include <vector> #include <thread> void ClearScreen() { char const* cmd = #if defined(_WIN32) "cls"; #elif defined(__linux__) "clear"; #endif std::system(cmd); } int const HELP_OPTION = 99; void HintWithSleep(char const* hint, int64_t seconds_would_wait = 0) { std::cout << hint << std::endl; if (seconds_would_wait > 0) { std::this_thread::sleep_for(std::chrono::seconds(seconds_would_wait)); } } using Options = std::vector<char const*>; int Select(char const* question, Options options) { do { std::cout << "\n" << question << "\n"; if (options.size() >= HELP_OPTION) { throw "扯淡吗?让用户做这么多选择?"; } for (int i=0; i<options.size(); ++i) { std::cout << i+1 << ":\t" << options[i] << "\n"; } std::cout << HELP_OPTION << ":\t 帮助\n"; std::cout << "请选择(1-" << options.size() << ",Ctrl+C 强行退出):"; int i; std::cin >> i; if (std::cin.fail()) { std::cin.clear(); // 清除错误的流状态 std::cin.ignore(); throw "错误的输入(非法选择项)"; } if (i == HELP_OPTION) { std::cout << "这一是款闻名全球的文字游戏,你只需输入选项开头的数字以\n" "做出选择即可参与一场惊心动魄的大战!" << std::endl; HintWithSleep("看明白了吗?即将开始重选", 4); ClearScreen(); continue; } if (i < 1 || i > options.size()) { std::cout << "你会不会玩啊!你得输入符合范围的选择!\n(碰上你们这种玩家真是烦死了!)" << std::endl; } return i; } while (false); return -1; } void GameOver(char const* additions = nullptr) { std::cout << ">>>>>> 抱歉,你挂了!!!玩家村全村人民高兴的准备吃席 <<<<<<<" << std::endl; if (additions && *additions) { std::cout << additions << std::endl; } } enum class Result {YouLose /*你死了*/, YouWin /*你赢了*/, WrongRoad /*错误路径*/}; void ByeBye(Result r) { if ( r == Result::YouLose) { std::cout << "\n下次要努力哦!再见!\n" << std::endl; } else if (r == Result::YouWin) { std::cout << "\n这不可能!算你狗屎运好!再见!\n" << std::endl; } } Result OnBox() { int sel = Select("哇!遇见了一个盒子,要不要打开?", Options { "那必须啊!", "还是苟点好……" }); switch(sel) { case 1 : // 打开 HintWithSleep("盒子里弹一把小刀,刺向你的下体……", 3); GameOver(); break; case 2 : HintWithSleep("没有打开宝盒,你拿不到信物。一只观察你很久的小狗冲上来咬住你的下体……", 3); GameOver("但那只可爱的小狗狗说它已经吃饱了。"); break; } return Result::YouLose; // 这关反正要你死 } Result OnBomb() { HintWithSleep("轰!!!\n突然,从天而降的地雷……", 3); GameOver("(地雷说:我又没爆炸,他怎么挂了?答:被砸的)"); return Result::YouLose; } Result UnImplemented() { HintWithSleep("此路还在开发中,欢迎各大开发商参加招投标!", 1); return Result::WrongRoad; } void Run() { int sel = Select("你掉入了洞穴!\n你的面前有三条路", Options{ "往前继续直走", "向左拐", "向右拐" }); enum Dir {goStraight=1, turnLeft=2, turnRight=3}; switch(sel) { case goStraight: ByeBye(OnBox()); //是的,直行必死 break; case turnRight: // 是的,往右更是死 ByeBye(OnBomb()); break; case turnLeft: // 往左没实现 UnImplemented(); // 唯一活路还没实现... break; } } int main() { for(;;) { try { Run(); auto c = Select("再来一把?", Options {"好!", "滚!"}); if (c == 2) { std::cout << "好吧!我滚了!" << std::endl; break; } ClearScreen(); } catch (char const* e) { std::cerr << "\n发像出现了异常:" << e << "……必须重来!" << std::endl; HintWithSleep("系统正在努力重启中...", 2); ClearScreen(); continue; } } }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue