首页 > 其他分享 >用二进制I/O进行随机访问

用二进制I/O进行随机访问

时间:2023-05-04 16:13:46浏览次数:27  
标签:ARSIZE 二进制 iofile pos 访问 随机 file double

/* randbin.c --- 用二进制I/O进行随机访问 */
#include<stdio.h>
#include<stdlib.h>
#define ARSIZE 1000//数组元素个数是 ARSIZE, 字符常量

int main(int argc, char *argv[])
{
    double numbers[ARSIZE];//声明数组,
    double value;
    const char *file = "numbers.dat";
    int i;
    long pos;
    FILE *iofile;

    //创建一组double类型的值:填充数组内容
    for (size_t i = 0; i < ARSIZE; i++)
    {
        numbers[i] = 100.0 * i + 1.0/(i + 1);

    }

    //二进制方式打开文件
    if ((iofile = fopen(file, "wb")) == NULL)
    {
        fprintf(stderr, "Could not open %s for output.\n", file);
        exit(EXIT_FAILURE);
    }

    //把数组以内容以二进制方式写入文件中
    fwrite(numbers, sizeof(double), ARSIZE, iofile);
    fclose(iofile);//关闭文件

    //以二进制读的方式打开文件
    if ((iofile = fopen(file, "rb")) == NULL)
    {
        fprintf(stderr, "Could not open %s for random access.\n", file);
        exit(EXIT_FAILURE);
    }
    
    //从文件中读取选定的内容
    printf("Enter an index in the range 0-%d.\n", ARSIZE - 1);
    while (scanf("%d", &i) == 1 && i >= 0 && i < ARSIZE)
    {
        //计算读取的位置
        pos = (long) i * sizeof(double);
        //定位文件位置:初始位置偏移 pos个字节
        fseek(iofile, pos, SEEK_SET);
        //读取一个double数据:从定位到的位置开始读一个数据, 
        //注意:stdio.h中的函数共享一个文件缓冲区(读缓冲区,或写缓冲区)
        //因此,上面fseek函数定位的位置 fread继续使用
        fread(&value, sizeof(double), 1, iofile);
        //打印读取到的值到屏幕
        printf("The value there is %f.\n", value);
        //超出范围跳出循环
        printf("Next index (out of range to quit):\n");
    }
    //关闭文件
    fclose(iofile);
    //打印结束信息
    printf("hello world!\n");
    return 0;
}

 

标签:ARSIZE,二进制,iofile,pos,访问,随机,file,double
From: https://www.cnblogs.com/cedar007/p/17371536.html

相关文章

  • SQLServer配置远程访问连接
    打开对象资源管理器,右击,选择属性然后,开启-->程序-->MicrosoftSQLServer2019-->配置管理器:要确保CP/IP协议被开启了。右击,选中属性。点击IP地址标签,找到IPAII部分。如果TCP动态端口这一栏的值为0,表示sqlserver数据库引擎是监听在动态端口上,删除0,并将TCP动态端口设置成空白、......
  • 16 14 | 百科应用系统设计:机房被火烧了系统还能访问吗?
    你好,我是李智慧。百科知识应用网站是互联网应用中一个重要的类别。很多人上网是为了获取知识,而互联网上的信息良莠并存,相对说来,百科知识应用网站能为普通人提供较为可信的信息。因此,百科知识网站虽然功能单一、设计简单,但是依然撑起了互联网的一片天空:维基百科是全球访问量TOP10......
  • .net 随机端口
    使用TcpListener获取一个可用的端口publicstaticintGetRandomPort(){varlistener=newTcpListener(IPAddress.Any,0);listener.Start();varport=((IPEndPoint)listener.LocalEndpoint).Port;listener.St......
  • 若依登录验证码不显示404访问问题
    最近在学习接触Java,那若依开源项目来练练手,部署后发现登录界面的登录验证码一直刷不出来,提示404访问错误。查看网上一直没找到解决办法。但知道原理都是配置文件的问题。后来在一个其他项目上找到灵感,给nginx的nginx.conf配置文件增加配置信息,项目可以正常启动并可以正常登录了。......
  • 基于莱维飞行和随机游动策略的灰狼算法-附代码
    基于莱维飞行和随机游动策略的灰狼算法文章目录基于莱维飞行和随机游动策略的灰狼算法1.灰狼优化算法2.改进灰狼优化算法2.1分段可调节衰减因子2.2莱维飞行和随机游动策略3.实验结果4.参考文献5.Matlab代码6.python代码摘要:在标准灰狼优化算法寻优的中后期,由于衰减因子减小,......
  • PL/SQL:ORA-22905:无法从非嵌套表项访问行
     ORA-06550:第11行,第25列:PLS-00642:在SQL语句中不允许使用本地收集类型ORA-06550:第11行,第2列PL/SQL:ORA-22905:无法从非嵌套表项访问行ORA-06550:第8行,第3列:PL/SQL:SQLStatementignored  解决方式: 表值函数返回必须使用PIPELINED关键字。functionget_lead_time_ft......
  • 解决上传md文件时出现的“<Fault 401: '请配置正确的用户名与访问令牌(access token),
    使用的工具:pycnbolg下载地址:https://github.com/dongfanger/pycnblog具体操作按这位大神的博客:如何在博客园上传markdown文件-NotYourferry-博客园(cnblogs.com)出现报错如图:偶然看到这两位的评论:于是我将config.yaml中的password改成了我的令牌,就上传成功了。......
  • 【访问者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介访问者模式(VisitorPattern)是一种行为型模式。它封装一个访问者类,把各元素类的操作集合起来,目的是将数据结构与数据操作分离。在不改变原有元素类数据结构的前提下,改变了元素类的执行算法。当某些较为稳定的东西(数据结构或算法),不想直接被改变但又想扩展功能,这时候适合用访问......
  • 设置MySQL 允许别人远程访问
    1、usemysql;selectuser,hostfromuser;2、updateusersethost="%"whereuser="root";  //修改后本机作为服务器,ipconfig查询ip3、flushprivileges;//保存配置4、quit;//退出5、重启mysql服务生效 如果host设置错误,请转至:  https://blog.csdn.net/qq_39306047/......
  • C-随机访问
    随机访问intfseek(FILE*stream,longintoffset,intwhence)stream--指向FILE对象的指针,该FILE对象标识了流.offset--这是相对whence的偏移量,以字节为单位.若为负则向前移.whence--这是表示开始添加偏移offset的位置.SEEK_SET--文件开头SEEK_CUR......