c语言文件操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言文件操作相关的知识,希望对你有一定的参考价值。
在本目录下有一个文件叫number_in.txt,里面全部是用逗号分隔的数字,现在要求你把这些数字获取到,然后升序排序后,重新用空格分割,输出到number_out.txt文件内。如果打开文件失败,则输出open file error。谁帮我做下 !非常感谢!
//完全ok了 我这边没你的那个txt 你用你的试试
我上图了 如果看不见 请鄙视百度
#include<stdio.h>
#include <stdlib.h>
main()
int i,j,n=0,tmp,arr[128]=0;
FILE *fp=NULL,*fpw=NULL;
if ( (fp=fopen("number_in.txt","r"))==NULL )
printf("open file error!\\n");
exit(1);
while (fscanf(fp,"%d,",&arr[n++])!=EOF);
fclose(fp);
for (i=0;i<n-1;i++)
for (j=0;j<n-i-1;j++)
if (arr[j]>arr[j+1])
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
fpw = fopen("number_out.txt","w");
for (i=0;i<n;i++)
fprintf(fpw,"%d ",arr[i]);
fclose(fpw);
多了一个零!不过还是很感谢哈!
追答哈哈 在fclose(fp); 下面加一个n--;就OK了
参考技术A /*12 36 52 789 12 45 65 98 75 84 96 36 92 19 57 57
Press any key to continue
*/
#include <stdio.h>#include <stdlib.h>
int main()
FILE *fin,*fout;
int num;
char comma;
fin = fopen("number_in.txt","rt");
fout = fopen("number_out.txt","wt");
if(!fin || !fout)
printf("open file error!\n");
exit(1);
while(!feof(fin))
fscanf(fin,"%d%c",&num,&comma);
fprintf(fout,"%d ",num);
printf("%d ",num);
printf("\n");
fclose(fin);
fclose(fout);
return 0;
追问
没有排序 不过很感谢!
参考技术B 都来做作业,将来怎么办? 参考技术C 数据量有多大?追问大概有100个数字和100个逗号!
追答那用数组就行,稍等
追问恩 谢谢哈
追答我编译通过了,因为要下班了,没有测试,如果有问题,稍微调整一下就行
代码如下:
#include
#include
#include
#define NUM 128
#define LEN 16
//数据量比较小,直接用插入排序
void my_sort(int a[], int n)
int i,j,temp;
for (i=1; i=0; j++)
if (a[j]>a[i])
a[j+1] = a[j];
else
break;
a[j+1] = temp;
void InAndPut()
int i,j,k;
FILE *pfRead = fopen("a.txt", "r");
FILE *pfWrite = fopen("b.txt", "w");
char chBuffer[NUM][LEN] = 0;
int iBuffer[NUM] = 0;
if (NULL == pfRead)
printf("error:打开文件a.txt失败\n");
exit(-1);
//读取数据
for (i=0; i<NUM && !feof(pfRead); i++)
for (j=0; j<LEN; j++)
chBuffer[i][j] = fgetc(pfRead);
if (',' == chBuffer[i][j])
chBuffer[i][j] = '\0';
break;
//将读取的数据转换成数字类型存放到iBuffer里
for (k=0; k<i; k++)
iBuffer[k] = atoi(chBuffer[k]);
my_sort(iBuffer, i);
for (k=0; k<i; k++)
fprintf(pfWrite, "%d ", iBuffer[k]);
fclose(pfWrite);
fclose(pfRead);
int main()
InAndPut();
system("pause");
return 0;
谢谢!
C 语言文件操作 ( C 语言中的文件操作函数 | 磁盘与内存缓冲区 | 缓冲区工作机制 )
一、C 语言中的文件操作函数
读取 文本文件 可以使用 getc , fgets , fscanf 函数 , 向 文本文件 写出数据可以使用 putc , fputs , fprintf 函数 ;
读取 二进制文件 可以使用 fread 函数 , 向 二进制文件 写出数据可以使用 fwrite 函数 ;
二、磁盘与内存缓冲区
上述所有读写文件的函数 , 都是缓冲区函数 , 即 C 语言中的文件操作 , 都是缓冲区函数 ;
磁盘 是由 操作系统 进行读写的 , 用户写的程序 , 不能直接操作磁盘 ;
操作系统 提供 读写文件的 系统调用 接口 , 在该接口上 是 C 语言的库函数 , 最上层就是 用户程序 ;
如果要操作硬件磁盘 , 就需要知道磁盘的驱动程序 , 磁盘扇区操作等 , 这就比较复杂了 ;
C 语言库函数 中 , 维护了一个缓冲区 , 这个缓冲区是 内存 中的缓冲区 ;
使用 C 语言文件操作函数 读写的 数据 , 不是直接来自磁盘 , 而是来自 内存中缓冲区 ;
三、缓冲区工作机制
缓冲区工作机制 :
如果 缓冲区大小 64KB , 假如使用 C 语言库函数 fread 读取一个字节数据 , 实际上会从磁盘文件中读取 64KB 数据 , 放入内存缓冲区中 ;
这是因为 读写内存的效率 远远高于 读写磁盘的效率 ;
这样的好处是 , 读取第 2 个字节时 , 可以直接从内存中读取 , 不需要再次读写磁盘 ;
该机制可以 增加用户程序的执行效率 , 减少磁盘访问次数 ;
磁盘有读写寿命 , 读写次数到了 , 磁盘就会报废 ;
缓冲区内容写入磁盘的时机 :
- 缓冲区满了
- 调用 fclose 关闭文件函数
以上是关于c语言文件操作的主要内容,如果未能解决你的问题,请参考以下文章