2014-09-28 65 views
0

我在C++中获得了此代码,其主要任务是计算两次之间的差异。首先它应该为两个结构变量赋值。之后它应该找出哪一个时间先开始。它将做的最后一件事是计算时间之间的差异。如何从多个结构变量(永久存储)的临时结构变量传递变量

我与这个码的问题不是我无法通过从一个临时结构变量变量给另一个变量,问题是当我通过的第二时间从所述临时结构变量到所述第二结构变量,从变量第一个结构变量被程序遗忘。无论如何,让变量传递到一个结构变量永久?

这里是我的代码:

#include <iostream> 
using namespace std; 

const int maxAddTime = 141; // 23 hours + 59 min. + 59 sec. 
const int minAddTime = 0; 
int addTime; 

char choice; 

bool done = false; 

struct timeset { 
    int hour; 
    int minute; 
    int second; 
}; 

int main(){ 
    timeset time1, time2, temp; 
    do {     
    int times = 1; 
     while (times <=2) { 
      do { 
      cout << "Write your " << times << " time (hh mm ss)" << endl; 
      temp = (times == 1) ? time1 : time2; 
      cin >> temp.hour >> temp.minute >> temp.second; 
      int addTime = temp.hour + temp.minute + temp.second; 

      if (addTime < minAddTime || addTime > maxAddTime) { 
       cout << "Invalid time!" << endl; 
       cout << "Do you want to change the time? (Y)es or (N)o?" << endl; 
       cin >> choice; 
      } 
      else { 
       choice = 'n'; 
       times++; 

      } 

      if (times == 1){ 
      time1 = temp; 
      cout << time1.minute ; 
      } 
      else { 
      time2 = temp; 
      cout << time2.minute << endl; 
      } 

      break; 
      } 
      while (choice != 'n' || choice != 'N'); 
     } 

     if (time1.hour > time2.hour || time1.minute > time2.minute || 
      time1.second > time2.second) {   
     cout << "The first time comes first!\n"; 
     } 
     else if (time1.hour < time2.hour || time1.minute < time2.minute || 
       time1.second < time2.second) { 
      cout << "The second time comes first!\n"; 
     } 
     else { 
     cout << "The times are equal!\n"; 
     } 

     int addTime = time1.hour + time1.minute + time1.second; 
     cout << addTime << endl; 
     addTime = addTime - (time2.hour + time2.minute + time2.second); 

     cout << addTime << endl << endl; 
    } 
    while (!done); 
    return 0; 
} 
+0

我使用一个临时值,因为我想在代码中有较少的重复。这是我想要time1的过程 - > temp - > time1,time2 - > temp - > time2程序正在做的是这样的:time1 - > temp - > time1,time1 - >一些高变量,time2 - > temp - > time2 – CuriousGuy1 2014-09-28 23:56:54

回答

1

你就是件之前检查其值增加“时代”:

else { 
       choice = 'n'; 
       times++; 

      } 

所以,当你第一次输入后到达这里,时间已经设置到2,第一个条件永远不会被满足。将时间++移到循环的结尾;

if (times == 1){ 
    time1 = temp; 
    cout << time1.minute ; 
    } 
    else { 
    time2 = temp; 
    cout << time2.minute << endl; 
    } 

    /// other code 
    times++; 

此外,你不能简单地添加不同的时间单位(小时+分钟+秒),并得到任何有意义的结果。您需要将每个时间组件标准化为一个通用单位 - 秒数将是最有可能的。所以,计算为:

int addTime = time1.hour*60*60 + time1.minute*60 + time1.second; 
+0

我在第一部分挣扎,所以我没有完全有时间继续第三部分,但我知道我会去做!我现在要试试这个!非常感谢你:^ D - IT WERKS! – CuriousGuy1 2014-09-29 00:04:24