我被要求编写一个程序,要求用户让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;
}
最佳答案
创建数组后,需要立即初始化intime
和outime
数组。像
std::memset(intime, 0, sizeof(intime));
应该为您工作。
您对
asctime
函数的使用也有问题。它返回一个静态字符串的地址,该静态字符串在每次调用asctime
后将被覆盖。您需要自己分配存储空间并复制返回的字符串。关于c++ - 根据卷中的编号存储进/出时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32935572/