如何从一个临时结构变量为多个结构变量传递变量(永久存储)

how to pass variables from a temp struct variable for multiple struct variables (permanent storage)

本文关键字:变量 结构 存储 一个      更新时间:2023-10-16

我在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;
}

在检查其值之前,您正在递增"次":

 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;