标准io练习----循环打印当前时间

time:

         time_t time(time_t *t);
         如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间。
        注意,time函数本身只返回从1970年1月1日00:00:00(unix纪元)开始的总秒数,并不直接提供日期或时间的格式化表示。如果你想要获取并打印出具体的日期和时间(如年、月、日、时、分、秒),你可以使用localtimegmtime函数将time_t值转换成struct tm结构体,然后使用strftime函数来格式化日期和时间。

localtime:

        struct tm *localtime(const time_t *timep);
        返回值是结构体指针,所指结构体封装着年月日时分秒

#include <stdio.h>  
#include <time.h>  
  
int main() {  
    time_t rawtime;  
    struct tm * timeinfo;  
  
    // 获取当前时间的时间戳  
    time(&rawtime);  
  
    // 将时间戳转换为本地时间  
    timeinfo = localtime(&rawtime);  
  
    // 打印本地时间  
    printf("当前本地时间:%d-%d-%d %d:%d:%d\n",  
           timeinfo->tm_year + 1900, // 年份需要加上1900  
           timeinfo->tm_mon + 1,     // 月份从0开始计数,所以需要加1  
           timeinfo->tm_mday,  
           timeinfo->tm_hour,  
           timeinfo->tm_min,  
           timeinfo->tm_sec);  
  
    return 0;  
}

fprintf:

         int fprintf( FILE *stream, const char *format, ... );

        格式化输出到流(stream)文件中,返回值是输出的字符数,发生错误时返回一个负值.

sprintf:

         int sprintf( char *buffer, const char *format, ... );
         格式化输出发送到buffer(缓冲区)中.返回值是写入的字符数量.

练习

1.编程读写一个文件test.txt,每隔1秒向文件中写入一行录入时间的数据,类似这样: 
1,  2024-8-24 15:16:42  
2,  2024-8-24 15:16:43
该程序应该无限循环,直到按Ctrl-C中断程序。
再次启动程序写文件时可以追加到原文件之后,并且序号能够接续上次的序号,比如: 
1,  2024-8-24 15:16:42
2,  2024-8-24 15:16:43
3,  2024-8-24 15:19:02
4,  2024-8-24 15:19:03
5,  2024-8-24 15:19:04

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    FILE *fp;
    if (argc != 2)
    {
        printf("put err");
        return -1;
    }
    fp = fopen(argv[1], "r+");//打开文件流
    if (NULL == fp)//容错判断
    {
        printf("fopen err");
        return -1;
    }
    time_t nowtime;
    struct tm *timep = NULL;
    char buf[64] = {};
    int len = 0;
    while (fgets(buf, 64, fp) != NULL)//当fgets遍历到尾时返回NULL
    {
        if (buf[strlen(buf) - 1] == '\n')//当数组中最后一个数等于\n时即改行结束行数+1
            len++;
    }
    while(1)
    {
        len++;
        time(&nowtime);//将当前时间存入nowtime中
        timep=localtime(&nowtime);//将转换后的时间返回到结构体指针timep中
        fprintf(fp,"%d, %d-%d-%d  %d:%d:%d\n",len,timep->tm_year+1900,timep->tm_mon+1,timep->tm_mday,timep->tm_hour,timep->tm_min,timep->tm_sec);//将信息输出到文件流中
        //time函数是获取1970年1月1日00:00:00(unix纪元)至今的时间,单位是秒
        //里面的参数年是-1900之后的年份,月份是0-11,所以需要调整一下
        fflush(fp);//刷新缓存区,将缓存区中的数据输出出来
        sleep(1);//延时1秒输出
    }
    return 0;
}

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值