day2 标准IO函数,time函数,缓冲区

 

要求拷贝一个文件,例如将1.c中的内容拷贝到2.c中

要求计算一个文件的大小。

要求计算一个文件有几行。文件的最后一行也有一个'\n'

fgets遇到\n会停止读取,所以\n肯定在\0的前一位,即查看fgets读取有的有效字符串最后一位是不是\n即可。

 

#include <stdio.h>    
#include <string.h>
#include <stdlib.h>

int main(int argc, const char *argv[])
{
    FILE *fp = fopen("text.txt","r");
    if(NULL == fp)
    {
        perror("fopen");
        return -1;
    }
    FILE *fp1 = fopen("text1.txt","w");
    if(NULL == fp1)
    {
        perror("fopen");
        return -1;
    }
//拷贝
/*    char s[64] = "";
    while(NULL != fgets(s,sizeof(s),fp))
    {
        fputs(s,fp1);
    }
    */
    //文件大小
    /*
    char s[2] = "";
    int h = 0;
    while(NULL != fgets(s,sizeof(s),fp))
    {
        i++;
        fputs(s,fp1);
    }
    */
    //行数
    char s[2] = "";
    int h = 0;
    while(NULL != fgets(s,sizeof(s),fp))
    {
        if('\n' == s[0])
            h++;
    }
    printf("行数:%d\n",h);

    fclose(fp);
    fclose(fp1);
    return 0;
}

 

 

#include <stdio.h>    
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

int main(int argc, const char *argv[])
{
    FILE *fp = fopen("./time.txt","a");
    if(NULL == fp)
    {
        perror("fopen");
        return -1;
    }
    time_t ti;
    struct tm *info = NULL;

    int i = 0;
    while(i < 3)
    {
        time(&ti);
        info = localtime(&ti);
        fprintf(fp,"[%d] %d-%02d-%02d %02d:%02d:%02d\n",\
                i+1,info->tm_year+1900,info->tm_mon+1,info->tm_mday,\
                info->tm_hour,info->tm_min,info->tm_sec);
        sleep(1);
        i++;
    }
    return 0; 
}

touch有一个usr.txt的文件,其中存储着用户的账户和密码,格式如下:

zhangsan aaaa

lisi bbbbb

空格前面是账户,空格后面是密码,一行一个账户、密码

要求如下:

从终端获取一个账户名和密码

判断是否能够登录成功

若账户不存在:则提示账户不存在

若账户存在,密码不匹配:则提示密码错误

账户密码均存在:则显示登录成功。

第三个作业:实现注册功能,同一用户名不能重复注册

#include <stdio.h>    
#include <string.h>
#include <stdlib.h>

void Log_in(FILE *fp)
{
    rewind(fp);
    char name1[10] = "";
    char password1[10] = "";
    printf("输入用户名:");
    scanf("%s",name1);
    printf("输入密码:");
    scanf("%s",password1);
    char name[10];
    char password[10]; 
    int s = 0;
    while(1)
    {
        if(fscanf(fp,"%s %s",name,password) == EOF)
        {
            printf("用户名不存在,请先注册\n");
            return;

        }
        if(0 != strcmp(name,name1))
        {
            continue;
        }
        if(0 == strcmp(password,password1))
        {
            printf("登录成功\n");
        }
        else
        {
            printf("密码错误\n");
        }
        return;
    }
}

void Register(FILE *fp)
{
    
    rewind(fp);
    char name1[10] = "";
    printf("输入用户名:");
    scanf("%s",name1);
    char name[10] = "";
    char password[10] = "";
    while(1)
    {
        if(fscanf(fp,"%s %s",name,password) == EOF)
        {
            break;
        }
        if(0 == strcmp(name,name1))
        {
            printf("用户名以存在,重新选择\n");;
            return;
        }
    }

    char password1[10] = "";
    printf("输入密码:");
    scanf("%s",password1);
    fputs(name1,fp);
    fputc(' ',fp);
    int s = fputs(password1,fp);
    fputc('\n',fp);
    fflush(fp);
    if(s >= 0)
    {
        printf("注册成功\n");
    }
}

int main(int argc, const char *argv[])
{
    //打开一个文件以读的方式
    FILE *fp = fopen("./usr.txt","a+");
    if(NULL == fp)
    {
        perror("fopen");
        return -1;
    }

    while(1)
    {

    printf("***************************************************\n");
    printf("**     1. 登录         2. 注册        0. 退出    **\n");
    printf("***************************************************\n");
    int n = 0;
    printf("请输入你的选择:");
    scanf("%d",&n);
    switch(n)
    {
    case 1:
            Log_in(fp);
            fflush(fp);
            break;
    case 2: 
            Register(fp);
              fflush(fp);
            break;
    case 0:
            return -1;
            break;
    default: 
            printf("输入有误重新输入\n");            
            break;
    }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值