2016-11-10 77 views
0

我想制作一个游戏来测试我的C++技能,并且在游戏中我使用方法函数定义attack()创建了一个名为Player的类。它打印出基于玩家方法变量一个随机字符串,然后它要求玩家输入尽可能少的时间字符串可能:不能输入时间:C++

//definitions for Player 
int Player::attack() 
{ 
    std::cout << "You are now attacking. \n"; 
    std::cout << "You must enter this string in as little time as possible:"; 

    std::string r = randStr(wordc); 
    std::cout << r << "\n"; 

    std::string attack; 
    double seconds_since_start; 
    time_t start = time(0); 
    while (true) 
    { 
      std::cin >> attack; 
      if (attack == r) {break;} 
      seconds_since_start = difftime(time(0), start); 
    } 
    std::cout << "You typed the word in " << seconds_since_start << "seconds\n"; 
} 

它不工作,我已经到处找一个答案。它只是返回无意义的随机数字。当我看到有人使用difftime()函数时,他们总是将tm结构转换为time_t变量,然后将其作为第二个参数。你需要使用这个吗? difftime()函数返回什么类型的数据?我究竟做错了什么?它是编译器吗?我非常感谢你的帮助。

+1

你可以找到'difftime一些文档()'[这里](http://en.cppreference.com/w/cpp/chrono/c/difftime)。但对于C++,您应该更喜欢['chrono'](http://en.cppreference.com/w/cpp/header/chrono)。 – wally

+0

可能您应该尝试使用[参考文档](http://en.cppreference.com/w/c/chrono/difftime)中给出的示例。 –

+6

如果用户在第一次尝试时输入了正确的字符串,则不用设置'seconds_since_start'即可跳出循环。即使用户不这样做,您仍然不会将最后的成功尝试纳入测量。将'seconds_since_start'赋值移至循环后面的点。 –

回答

0

只需在break;之前在if区块中放置时间测量值,延迟就可以正确计算。但是,在下次尝试attack != r时,必须重新启动计数器(如果需要)。

double seconds_since_start; 
time_t start = time(0); 
while (true) 
{ 
    std::cin >> attack; 
    if (attack == r) { 
     // stop the counter and measure the delay 
     seconds_since_start = difftime(time(0), start); 
     break; 
    } 
    // restart the counter (if needed) 
    start = time(0); 
} 
std::cout << "You typed the word in " << seconds_since_start << "seconds\n"; 
+0

非常感谢你!这只是一个简单的逻辑错误,我错过了! – Chopdops