我被要求编写一个程序,要求用户让rollno先进入学生,然后保持该InTime固定,并且仅通过在给定范围内询问该学生的rollno任意次数,以使该inTime固定,从而更改outTime。送他们出去。这是我写的代码:

#include<iostream.h>
#include<fstream.h>
#include<time.h>
int main()
{
char *intime[10],*outtime[10],d='\0';
int rollno[10]={10,4,1,5,6,2,3,7,9,8},i,c;
time_t obj;
time(&obj);
struct tm* t;
t=localtime(&obj);

ofstream f;

f.open("fit.txt");

cout<<"Enter your roll no to go in.\n";

cin>>c;


intime[c]=asctime(t);
     cout<<"Enter your roll no to go out.\n";

cin>>c;
while(c>=1 && c<=10)
{



     outtime[c]=asctime(t);
 }

f<<rollno[c]<<" "<<intime[c]<<" "<<outtime[c]<<endl;


 f.close();
 ifstream t1;
 t1.open("fit.txt");
for(i=0;i<10;i++)
{

cout<<" "<<rollno[i]<<" "<<intime[i]<<" "<<outtime[i]<<endl;  }

t1.close();
return 0;
}


问题是,由于除了请求的时间之外,我无法更新时间和超时,所以我获得了垃圾值。需要帮助。

更新:这是我想出的最终代码,它没有给出任何垃圾值,并且给出了不同的intime和outtime值,请随时提出进一步的建议

#include<iostream.h>
#include<fstream.h>
#include<time.h>
int main()
{

int i,j;char *intime[10],*outtime[10],it[10],ot[10];

for(i =1;i<=10;i++)
{
 intime[i]="0";
 outtime[i]="0";
}
int rollno[10]={10,4,1,5,6,2,3,7,9,8},c;
time_t obj,obj1;
time(&obj);

struct tm* t;
struct tm* u;

t=gmtime(&obj);


ofstream f;

f.open("fit.txt");

cout<<"Enter your roll no to go in.\n";

cin>>c;

for(i=1;i<=10;i++)
if(rollno[i]==c)

{strftime(it,10,"%I:%M:%S",t);
intime[i]=it;}


 cout<<"Enter your roll no to go out.\n";

cin>>c;
time(&obj);

u=gmtime(&obj);

 for(j=1;j<=10;j++)
 if(rollno[j]==c)
 {
 if(intime[j]!="0")

   { strftime(ot,10,"%I:%M:%S",u);
    outtime[j]=ot;}
  }




 f.close();
 ifstream t1;
 t1.open("fit.txt");

for(i=1;i<=10;i++)

cout<<" "<<rollno[i]<<" "<<intime[i]<<" "<<outtime[i]<<endl;


t1.close();
return 0;
}

最佳答案

创建数组后,需要立即初始化intimeoutime数组。像

std::memset(intime, 0, sizeof(intime));


应该为您工作。

您对asctime函数的使用也有问题。它返回一个静态字符串的地址,该静态字符串在每次调用asctime后将被覆盖。您需要自己分配存储空间并复制返回的字符串。

关于c++ - 根据卷中的编号存储进/出时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32935572/

10-10 12:34