第三天(实习无忧)

张开发
2026/6/11 6:31:25 15 分钟阅读
第三天(实习无忧)
##学习了文件操作##想要持久性存储数据就得使用文件1.文件的打开和关闭FILE* pffopen(文件路r/w/a);r是读取文件内容若无该文件则报错w是写文件若无该文件则直接新创建重新使用会置空原文件内容a是追加写文件fclosepf使用完必须关闭与free异曲同工2.学习以下文件操作函数时让我想起了之前按行读取字符串使用的fgets以及其他等等明白了其原理并与现在的文件操作建立了联系并解答了很多之前并未发现的问题。(读取文件内容函数搭配用r写文件函数搭配w打开方式需注意类似rbwb是二进制方式)其实scanf就是从标准输入流也就是键盘输入读取内容存储到对应变量里去而fgetc这类输入函数是从文件流读取内容其实两者也是异曲同工。之前误解成为什么scanf看起来像输入到变量里去而文件输入函数却不能输入到文件里去其实两者实质是在流里读取内容而不是输入这让我把scanf与文件输出函数混为一谈。而printf与输出函数亦是如此前者是输出到屏幕后者是输出到文件应站在编写的程序为主体看待这两对。int chfgetc(pf) 从文件读取一个字符可搭配while循环使用一直读取直到文件结束fputs(ch,pf) 输出一个字符到文件里去可以搭配for循环一直输入fgets(arr,100,pf) 从文件里读取100个字节的字符串到arr里去 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(之前竞赛时有使用过这个函数读取一行字符串但不理解原理 fgets(arr,100,stdin) 现在明白其实函数最后一个参数可以自己调节使用stdin其实就是在标准输入流也就是键盘读取内容现在只是改为在pf文件里读取类似如此以上及以下的文件操作函数其实也可以如此使用。而搭配此函数在键盘读取字符串通常需要将结尾 \n改为\0,之前使用的是 arr[strcspn(arr,\n)]\0 ,现在突然明白strcspn其实是找到改字符串的偏移量也就是下标所以才用【】括起来)fputs(arr,pf) 输出一串字符串到文件里去fscanf(pf,%s %d,arr,n) 从文件格式化读取对应内容到对应变量中fprintf(pf,%s %d,arr,n) 格式化输出对应变量的内容到文件里去fread(arr,size,n,pf) 读取文件n个字节为size的内容到arr里去 fwrite(arr,size,n,pf) 将arr中n个字节为size的内容输出到pf文件中 两者均为二进制用法需搭配rb或wb使用也可以视为字节大小为size进行n次读取或输入操作。3.拓展sscanf与sprintfsscanf(arr,%s %d,brr,n) 从字符串arr中读取格式化数据放到对应变量中sprintf(arr,%s %d,brr,n) 将格式化变量存储到arr中4.文件的随机读写光标起始位置在第一个字节偏移量为0处光标即使文件指针fseek(pf,n,SEEK_SET // SEEK_CUR // SEEK_END) 分别对应头当前光标违者尾。把光标从某个位置跳过n个字节ftell(pf) 返回当前光标所在位置rewind(pf) 重置光标位置即到0偏移量即起始位置三者搭配例如获取文件大小fseek(pf,0,SEEK_END); //光标跳到文件尾long flie_sizeftell(pf); //返回文件大小rewind(pf); //光标回到文件头

更多文章