6.21 作业

1.向文件中输出时间,并且是每一秒更新一次,按ctrl+c停止输出后,下次再运行./a.out会继续想文件中接着输出

#include 
#include 
#include 
#include 
int main(int argc,const char *argv[])
{
	FILE *f;
	//打开文件
	if((f=fopen("./time.txt","a+"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	
	//计算行数
	char a[128];
	int line=0;
	while(fgets(a,sizeof(a),f)!=NULL)
	{
		if(a[strlen(a)-1]=='\n')
			line++;
	}

	//写入时间
	time_t t;
	struct tm *date;
	int sec = -1;
	while(1)
	{
		time(&t);
		date = localtime(&t);
		if(sec!=date->tm_sec)//判断时间增加
		{
			fprintf(f,"%d:%4d-%02d-%02d %02d:%02d:%02d\n",++line,
					date->tm_year+1900,date->tm_mon+1,date->tm_mday,
					date->tm_hour,date->tm_min,date->tm_sec);
			sec = date->tm_sec;
			fflush(f);	//刷新缓冲区
		}
	}
	fclose(f);
	return 0;
}

6.21 作业_第1张图片

 2.使用fread、fwrite完成两个文件的拷贝

#include 
#include 
#include 
int main(int argc,const char *argv[])
{
	FILE *fp1 = NULL,*fp2 = NULL;//fp1为源文件 fp2为目标文件
	//从终端输入文件,打开文件
	if((fp1 = fopen(argv[1],"r")) == NULL)
	{
		perror("f1 error");
		return -1;
	}
	if((fp2 = fopen(argv[2],"w")) == NULL)
	{
		perror("f2 error");
		return -1;
	}
	//复制文件
	char a[20];
	int teg;
	while((teg=fread(a,1,sizeof(a),fp1))!=0)
	{
		fwrite(a,1,teg,fp2);
	}
	fclose(fp1);
	fclose(fp2);
	return 0;
}

3.1 fopen和fclose的使用

#include

int main(int argc, const char *argv[])
{
    FILE *fp = NULL;//定义文件指针

    //使用fopen打开一个文件
    fp = fopen("./01text.txt", "w"); 

    //判断是否打开成功
    if(fp == NULL)
    {
        printf("open file error\n");
    }else
    {
        printf("open file ok\n");
    }
    //关闭一个文件
    if(fclose(fp)!=0)
    {
        printf("文件关闭失败\n");
    }
    return 0;
}

 3.2错误码

#include
//#include      //错误码所在的头文件
//#include

int main(int argc, const char *argv[])
{
    FILE *fp;             //定义一个文件指针

    //以只读的形式打开文件
    if((fp = fopen("./02test.txt", "r")) == NULL)
    {
        //strerror(errno);    //将错误码转变成错误信息
        //printf("%s\n", strerror(errno));
        perror("fopen error");

        return -1;
    }
    fclose(fp);
    
    return 0;
}

3.3 fgetc和fputc的使用

#include

int main(int argc, const char *argv[])
{
    //定义文件指针
    FILE *srcfp, *dstfp;
    //以只读的形式打开文件
    if((srcfp=fopen(argv[1], "r")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //以只写的形式打开第二个文件
    if((dstfp = fopen(argv[2], "w")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //定义容器存放读取的字符
    char ch;
    //循环从文件中读取数据
    while((ch = fgetc(srcfp)) != EOF)
    {
        //将读取出来的数据放入第二个文件中
        fputc(ch, dstfp);
    }

    //关闭文件
    fclose(srcfp);
    fclose(dstfp);

    printf("拷贝成功\n");

    return 0;
}

3.4 fgets和fputs的使用

#include

int main(int argc, const char *argv[])
{
    //定义文件指针
    FILE *srcfp, *dstfp;
    //以只读的形式打开文件
    if((srcfp=fopen(argv[1], "r")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //以只写的形式打开第二个文件
    if((dstfp = fopen(argv[2], "w")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //定义容器存放读取的字符
    char chi[20];
    //循环从文件中读取数据
    while(fgets(chi,srcfp) != NULL)
    {
        //将读取出来的数据放入第二个文件中
        fputs(chi,dstfp);
    }

    //关闭文件
    fclose(srcfp);
    fclose(dstfp);

    printf("拷贝成功\n");

    return 0;
}

3.5缓冲区大小

#include

int main(int argc, const char *argv[])
{
    //验证行缓存大小为1024字节
    //如果没有使用缓存区,那么其大小为0
    printf("行缓存的大小为:%ld\n", stdin->_IO_buf_end - stdin->_IO_buf_base);

    //使用标准输入指针
    char s[128];
    fgets(s, sizeof(s), stdin);
    printf("s = %s\n", s);
    //当使用了该缓存区后,该大小为1024
    printf("行缓存的大小为:%ld\n", stdin->_IO_buf_end - stdin->_IO_buf_base);
    printf("行缓存的大小为:%ld\n", stdout->_IO_buf_end - stdout->_IO_buf_base);

    //验证全缓存的大小
    FILE *fp;
    //打开文件
    if((fp=fopen("./01test.txt", "w")) == NULL)
    {
        perror("fopen error");
        return -1;
    }
    //向文件中写入数据
    fputc('H', fp);

    printf("全缓存的大小为:%ld\n", fp->_IO_buf_end-fp->_IO_buf_base);

    //关闭文件
    fclose(fp);

    //验证不缓存的大小
    fputs("error\n", stderr);           //向标准出错中写入数据
    printf("不缓存的大小为:%ld\n", stderr->_IO_buf_end-stderr->_IO_buf_base);

    return 0;
}

3.6行缓存刷新时机

#include

int main(int argc, const char *argv[])
{
    //当缓存区没有到刷新时机时,不会刷新缓存区
    //printf("hello world");
    //while(1);
    
    //1、遇到换行符号时会刷新缓存区
    //printf("hello world\n");
    //while(1);
    
    //2、程序结束后,会自动刷新缓存区
    //printf("hello world");
    

    //3、当关闭文件指针时,会刷新缓存区
    //printf("hello world");
    //fclose(stdout);           //手动关闭标准输出文件指针
    //while(1);
    
    //4、当使用fflush函数刷新时,也会刷新缓存区
    //printf("hello world");
    //fflush(stdout);            //手动刷新缓存区
    //while(1);
    
    //5、缓存区满了,也会刷新缓存区
    //for(int i=0; i<1500; i++)
    //{
    //    printf("A");
    //}
    //while(1);
    
    //6、当输入输出发生切换时也会刷新缓存区
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    while(1);

    return 0;
}

3.7 全缓存刷新时机

#include

int main(int argc, const char *argv[])
{
    FILE *fp;
    //打开文件
    if((fp=fopen("./01test.txt", "w")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //1、当遇到换行符号时,不会刷新全缓存
    //fputs("hello world\n", fp);
    //while(1);

    //2、当程序结束后,会刷新全缓存
    //fputs("hello world", fp);

    //3、当关闭文件指针时,会刷新全缓存
    //fputs("hello world", fp);
    //fclose(fp);
    //while(1);
    
    //4、当使用fflush刷新时,会刷新全缓存
    //fputs("hello world", fp);
    //fflush(fp);
    //while(1);
    
    //5、当全缓存满了后,会刷新全缓存
    //for(int i=0; i<5000; i++)
    //{
    //    fputc('A', fp);
    //}
    //while(1);
    
    //6、当输入输出切换时,会刷新全缓存
    fputc('H', fp);
    fgetc(fp);
    while(1);

    return 0;
}

3.8 输出时间

#include
#include           //有关时间的头文件

int main(int argc, const char *argv[])
{
    //定义时间类型,保存秒数
    time_t sys_time;

    //调用time函数,获取秒数
    time(&sys_time);

    //调用将秒数转变成时间指针
    struct tm * t = localtime(&sys_time);

    //输出获取的时间
    printf("%4d-%02d-%02d %02d:%02d:%02d\n",\
            t->tm_year+1900, t->tm_mon+1, t->tm_mday,\
            t->tm_hour, t->tm_min, t->tm_sec);
    
    return 0;
}

3.9 springtf和snprintf

#include
#include           //有关时间的头文件

int main(int argc, const char *argv[])
{
    //定义时间类型,保存秒数
    time_t sys_time;

    //调用time函数,获取秒数
    time(&sys_time);

    //调用将秒数转变成时间指针
    struct tm * t = localtime(&sys_time);

    //输出获取的时间
//    printf("%4d-%02d-%02d %02d:%02d:%02d\n",\
            t->tm_year+1900, t->tm_mon+1, t->tm_mday,\
            t->tm_hour, t->tm_min, t->tm_sec);

    char buf[128] = "";           //定义一个数组
    /*
    sprintf(buf,"%4d-%02d-%02d %02d:%02d:%02d\n",\
            t->tm_year+1900, t->tm_mon+1, t->tm_mday,\
            t->tm_hour, t->tm_min, t->tm_sec);
    */
    snprintf(buf,sizeof(buf),"%4d-%02d-%02d %02d:%02d:%02d\n",\
            t->tm_year+1900, t->tm_mon+1, t->tm_mday,\
            t->tm_hour, t->tm_min, t->tm_sec);

    printf("%s", buf);      //输出时间

    return 0;
}

3.10 fscanf和fprintf

#include
#include

int main(int argc, const char *argv[])
{
    //定义文件指针
    FILE *fp;
    char userName[100];
    char pwd[20];

    //以只写的形式打开文件
    if((fp=fopen("./06test.txt", "a")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //将账号和密码输入
    printf("请输入注册账号:");
    scanf("%s", userName);
    printf("请输入密码:");
    scanf("%s", pwd);

    //将内容写入文件中
    fprintf(fp, "%s %s\n", userName, pwd);
    

    //关闭文件
    fclose(fp);
    printf("注册成功\n");

    //再次以只读的形式打开文件
    if((fp = fopen("./06test.txt", "r")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //定义变量接收登录账号和密码
    char login[100], password[20];
    printf("请输入登录账号:");
    scanf("%s", login);
    printf("请输入登录密码:");
    scanf("%s", password);

    while(fscanf(fp,"%s %s", userName, pwd) != EOF)
    {
        if(strcmp(userName,login)==0 && strcmp(pwd,password)==0)
        {
            printf("登录成功\n");

            fclose(fp);
            return 2;
        }
    }
    
    printf("登录失败\n");
    fclose(fp);

    return 0;
}

3.11 feof、ferror的使用

#include

int main(int argc, const char *argv[])
{
    FILE *fp;

    //以只读的形式打开文件
    if((fp=fopen("./01size.c", "r")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    while(1)
    {
        char ch;
        ch = fgetc(fp);
        printf("%c", ch);

        if(feof(fp))
        {
            printf("读到文件末尾\n");
            break;
        }else if(ferror(fp))
        {
            printf("读取文件失败\n");
            break;
        }
    }

    //关闭文件
    fclose(fp);

    return 0;
}

3.12 关于光标的函数(fseek、ftell、rewind)

#include

//定义结构体类型
struct Stu
{
    char name[20];
    int age;
    double score;
};

int main(int argc, const char *argv[])
{
    //定义文件指针
    FILE *fp;

    //以只写的形式打开文件
    if((fp=fopen("./07test.txt", "w")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //定义两个结构体变量
    struct Stu s[2] = {{"zhangsan", 18, 99}, {"lisi", 20, 88}};

    //向文件中写入两个学生大小的数据
    fwrite(s, sizeof(struct Stu), 2, fp);

    //关闭文件
    fclose(fp);

    //以只读的形式打开文件
    if((fp = fopen("./07test.txt", "r")) == NULL)
    {
        perror("fopen error");
        return -1;
    }
    
    //以fread进行读取数据
    struct Stu stu;

    //要读取第二个学生信息
    //定位光标
    fseek(fp, sizeof(struct Stu) ,SEEK_SET);
    int ret = fread(&stu, sizeof(struct Stu), 1, fp);

    printf("姓名:%s, 年龄:%d, 分数:%lf\n", stu.name, stu.age, stu.score);

    //fwrite(buf1, 1, ret, stdout);

    //关闭文件
    fclose(fp);

    return 0;
}

3.13 以追加的形式打开文件,使用fseek函数移动光标,是否能够起效果

#include

int main(int argc, const char *argv[])
{
    FILE *fp;
    //以追加的形式打开文件
    if((fp=fopen("./01test.txt", "a+")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //更新指针执行到开头
    fseek(fp, 0, SEEK_SET);

    fputs("hello world\n", fp);         //向文件中写入数据
    //char buf[128] = "";
    //fgets(buf, sizeof(buf), fp);

//    printf("buf = %s\n", buf);

    //关闭文件
    fclose(fp);

    return 0;
}

4.打马赛克

#include 
#include 
#include 
void aa(unsigned char t[],int p)
{
	for (int i=0;i

 

 

你可能感兴趣的:(c语言)