24.1.2 IO Day2

文章详细展示了C语言中的文件I/O操作,包括使用文件指针进行读写,如文件打开、定位、读取和修改文件内容。同时介绍了标准IO与文件IO的区别,以及系统调用在文件操作中的角色。最后提及了链表遍历检测环路的方法。
摘要由CSDN通过智能技术生成

1.代码:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 int main(int argc, const char *argv[])
  5 {
  6     //以只写的形式打开文件
  7     FILE *fp = NULL;
  8     //打开文件,光标在开头
  9     if((fp = fopen("./test.c", "r")) == NULL)
 10     {
 11         perror("fopen error");
 12         return -1;
 13     }
 14 
 15     //读取文件内容
 16     char rbuf[1]="";
 17     while(1)
 18     {
 19     if(feof(fp))
 20         break;
 21     fread(rbuf, 1, sizeof(rbuf), fp);
 22     //输出数据
 23     fwrite(rbuf, 1, sizeof(rbuf), stdout);
 24     }
 25     fclose(fp);
 26     return 0;
 27 }             

运行结果:

2.代码:

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

int do_register()
{
    FILE *fp=NULL;
    char user_name_register[20];
    char pwd_reg[20];

    //输入账号名和密码
    printf("请输入注册帐号: ");
    fgets(user_name_register,sizeof(user_name_register),stdin);
    printf("请输入注册密码: ");
    fgets(pwd_reg,sizeof(pwd_reg),stdin);

    //将最后一个字符换成'\0'
    user_name_register[strlen(user_name_register)-1]='\0';
    pwd_reg[strlen(pwd_reg)-1]='\0';
    fp=fopen("./test.c","a+");
    if(fp==NULL)
    {
        perror("fopen error");
        return -1;
    }
    fprintf(fp,"%s %s\n",user_name_register,pwd_reg);
    fclose(fp);
    printf("success");
    return 0;
}  
            
int do_login()
{
    char user_name_register[20];
    char pwd_reg[20];
    printf("请输入登陆帐号: ");

    //输入账户名和密码
    fgets(user_name_register,sizeof(user_name_register),stdin);
    printf("请输入登陆密码: ");
    fgets(pwd_reg,sizeof(pwd_reg),stdin);
    user_name_register[strlen(user_name_register)-1]='\0';
    pwd_reg[strlen(pwd_reg)-1]='\0';

    char username[20];
    char pwd[20];
    FILE *rfp=NULL;
    if((rfp=fopen("./test.c","r"))==NULL)
    {
        perror("fopen error");
        return -1;
    }

    while(1)
    {
        int res = fscanf(rfp,"%s %s",username,pwd);
        if(res<0)
        {
            printf("登陆失败\n");
            fclose(rfp);
            return 1;
        }
    //比较账号名是否相同
        if(strcmp(user_name_register,username)==0&&strcmp(pwd_reg,pwd)==0)
        {
            printf("登陆成功\n");
            fclose(rfp);
            return 1;
        }
    }
}             
  

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

    char menu;
    while(1)
    {
        printf("\t\t====1、注册====\n");
        printf("\t\t====2、登陆====\n");
        printf("\t\t====0、退出====\n");
        printf("请输入功能: \n");

        scanf("%c",&menu);
        while(getchar()!='\n');
        switch(menu)
        {
            case '1':
                {
                    do_register();
                }
                break;
            case '2':
                {
                    do_login();
                }
                break;
            case '0':
                {
                    exit(EXIT_SUCCESS);//退出程序
                }
            default:
                printf("error");
        }
        printf("请输入任意键清屏: \n");
        while(getchar()!='\n');
        system("clear");    //清屏
    }

    return 0;
}       


 

运行结果:

3.代码:

  1 #include<stdio.h>
  2 int main(int argc, const char *argv[])
  3 {
  4     //定义文件指针打开文件
  5     FILE *fp = NULL;
  6     if((fp = fopen("./111.bmp", "r+")) == NULL)
  7     {
  8         perror("fopen error");
  9         return -1;
 10     }
 11 
 12     //向后偏移两个字节得到文件的大小
 13     fseek(fp, 2, SEEK_SET);
 14 
 15     unsigned int size;
 16     fread(&size, sizeof(size), 1, fp);   //从文件中读取一个整形数据
 17     printf("size = %d\n", size);
 18 
 19     //想要更改像素
 20    unsigned char color[3] = {255, 0, 0};    //纯蓝色
 21 
 22     //将光标偏移到图像数据处
 23     fseek(fp, 54, SEEK_SET);
 24     for(int i=0; i<424; i++)   //外行
 25     {
 26         for(int j=0; j<680; j++)   //内列
 27         {
 28             fwrite(color, sizeof(color), 1, fp);
 29         }
 30     }
 31     //关闭文件
 32     fclose(fp);
 33     return 0;
 34 }
 35               

运行结果:

面试题目:

1、文件IO与标准IO的区别

文件IO依赖于系统提供的函数,而标准IO依赖于库函数

文件IO不需要经过缓冲区,而标准IO会经过缓冲区

2、什么是IO

IO就是输入和输出,实现文件与文件之间信息转换。

3、什么是文件指针

文件指针就是指向文件的指针。来源于标准IO库函数,包含了一个缓冲区和一个用于系统调用的文件描述符。

4、简述一下系统调用

系统调用就是文件IO,直接使用内核提供的函数进行操作。每次在系统调用时都会从用户空间转换到内核空间,效率相对较低

5、如何判断一个单向链表中有环
遍历链表后,看节点是否有重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值