根据文件

时间:2015-10-04 16:13:33

标签: c++ file

我被要求编写一个程序,询问用户的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;
}

1 个答案:

答案 0 :(得分:0)

您需要在创建intimeoutime数组后立即初始化它们。有点喜欢

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

应该适合你。

使用asctime功能时也遇到问题。它返回静态字符串的地址,每次调用asctime后都会被覆盖。您需要自己分配存储并复制返回的字符串。