我被要求编写一个程序,询问用户的rollno,让学生先进入内部,然后保持InTime固定,只通过在给定范围内多次询问学生的rollno来改变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值,请随时建议进一步改进此< / p>
#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;
}
答案 0 :(得分:0)
您需要在创建intime
和outime
数组后立即初始化它们。有点喜欢
std::memset(intime, 0, sizeof(intime));
应该适合你。
使用asctime
功能时也遇到问题。它返回静态字符串的地址,每次调用asctime
后都会被覆盖。您需要自己分配存储并复制返回的字符串。