-
2021-05-20 18:42:12
《C语言编程对文件中数据进行处理》由会员分享,可在线阅读,更多相关《C语言编程对文件中数据进行处理(2页珍藏版)》请在人人文库网上搜索。
1、C语言编程,对文件中数据进行处理对N个数据进行排序,去重,并计算出去重后的极差(最大值-最小值),去重后的平均数输入:使用文件输入,输入文件为:data.txt共两行:第一行为数据个数N(1void main()FILE *f;int num;int data50;int i=0,j=0;int max,min;int tmp;f=fopen(data.txt,r+);fscanf(f,%d,&num);for(i=0;idataj)tmp=datai;datai=dataj;dataj=tmp;max=data0;tmp=0;for(i=0;datai!=0;i+)tmp+=datai;min=datai;num=i;rewind(f);fprintf(f,%dn,num);for(i=0;datai!=0;i+)fprintf(f,%d ,datai);fputc(n,f);fprintf(f,%d %f,max-min,(float)tmp)/(float)num);/fputc(EOF,f);fclose(f);。
更多相关内容 -
c语言实现把文件中数据读取并存到数组中
2020-08-31 21:25:26下面小编就为大家带来一篇c语言实现把文件中数据读取并存到数组中。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
用C语言实现从文本文件中读取数据后进行排序的功能
2020-09-01 20:19:25是一个十分可靠的程序,这个程序的查错能力非常强悍。程序包含了文件操作,归并排序和字符串输入等多种技术。对大家学习C语言很有帮助,有需要的一起来看看。 -
C语言从txt文件中逐行读入数据存到数组中的实现方法
2020-08-31 21:24:30下面小编就为大家带来一篇C语言从txt文件中逐行读入数据存到数组中的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
C语言读取文件数据,写入内存
2018-12-11 15:58:34作为一个新手学习C语言读写数据,我整合了一下自己查找的一些资料,用C语言实现将一个文件读入内存中,里面有运行工具,和一个word文档代码。 -
C语言将文件数据读入内存
2016-09-29 21:53:49程序由一个主函数和两个子函数构成;子函数为getData()和check()。getData用来读取数据,将数据存入内存,将内存地址返回给主函数。check负责检查数据传递是否正确。 -
C语言编程中从密码文件获取数据的函数总结
2020-12-31 20:33:55C语言getpw()函数:取得指定用户的密码文件数据 头文件: #include <pwd> #include 定义函数: int getpw(uid_t uid, char *buf); 函数说明:getpw()会从/etc/passwd中查找符合参数uid所指定的用户账号数据, 找... -
C语言>数据文件自动生成的实现 Lab2.zip
2021-03-19 03:25:57功能描述:程序自动生成.txt文件,内部存放生成的数据,其中第一行存储数据的条数n,从第...条数参数n和文件名称参数FileName通过cmd中的命令行参数传入,两参数顺序不定,缺少参数时,条数n随机生成,文件名可以指定。 -
c语言中文件的使用方法
2021-05-21 06:26:59c语言中文件的使用方法一.文件指针的定义FILE *fp//注意FILE的大写二.文件的打开fp=fopen("(路径)文件名.文件格式后缀","文件的使用方法")//注意路径下为//而不是/三.文件的使用方法1.“r” 模式:1.1 打开文件进行...c语言中文件的使用方法
一.文件指针的定义
FILE *fp//注意FILE的大写
二.文件的打开
fp=fopen("(路径)文件名.文件格式后缀","文件的使用方法")//注意路径下为//而不是/
三.文件的使用方法
1.“r” 模式:
1.1 打开文件进行只读操作,即只能从文件读取内容。
1.2 若欲操作的文件不存在,则打开失败。
1.3 成功打开文件时,文件指针位于文件开头。
1.4 打开文件后,不会清空文件内原有内容。
1.5 可从文件中任意位置读取内容。
2."w" 模式:
2.1 打开文件进行“只写”操作,即只能向文件写入内容。
2.2 若欲操作的文件不存在,则新建文件。
2.3 成功打开文件时,文件指针位于文件开头。
2.4 打开文件后,会清空文件内原有的内容。
2.5 可向文件中任意位置写入内容,且进行写入操作时,会覆盖原有位置的内容。
3."a" 模式:
3.1 打开文件进行“追加”操作,即只能向文件写入内容。
3.2 若欲操作的文件不存在,则新建文件。
3.3 成功打开文件时,文件指针位于文件结尾。
3.4 打开文件后,不会清空文件内原有内容。
3.5 只能向文件末尾追加(写)内容。
4."r+"模式:
4.1 打开文件进行“读写”操作,即既可读取,又可写入。
4.2 若欲操作的文件不存在,则打开失败。
4.3 成功打开文件时,文件指针位于文件开头。
4.4 打开文件后,不会清空文件内原有内容。
4.5 无论是读取内容还是写入内容,都可在文件中任意位置进行,且进行写入操作时,会覆盖原有位置的内容。
5."w+"模式:
5.1 打开文件进行“读写”操作,即既可读取,又可写入。
5.2 若欲操作的文件不存在,则新建文件。
5.3 成功打开文件时,文件指针位于文件开头。
5.4 打开文件后,会清空文件内原有的内容。
5.5 无论是读取内容还是写入内容,都可在文件中任意位置进行,且进行写入操作时,会覆盖原有位置的内容。
6."a+"模式:
6.1 打开文件进行“读写”操作,即既可读取,又可写入。
6.2 若欲操作的文件不存在,则新建文件。
6.3 成功打开文件时,文件指针位于文件结尾。
6.4 打开文件后,不会清空文件内原有内容。
6.5 读取内容时,可以在任意位置进行,但写入内容时,只会追加在文件尾部。
三.文件处理函数
A.fgetc\fputc(字符)
fgetc意为从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。
fgetc格式:
ch=fgetc(FILE *stream)
fputc意为将字符ch写到文件指针fp所指向的文件的当前写指针的位置。
fputc格式:
fputc(char c, FILE *fp)
B.fgets\fputs(字符串)
fgets函数功能为从指定的流中读取数据,每次读取一行。从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
fgets格式:
fgetc(char *str, int n, FILE *stream)
fputs是一个函数,具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。
fputs格式:
fputs(const char *str, FILE *stream)
返回值:该函数返回一个非负值,如果发生错误则返回 EOF(-1)。
(1)str:这是一个数组,包含了要写入的以空字符终止的字符序列。
(2)stream:指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流
C.数据块的读写
fread\fwrite
fread从给定输入流stream读取最多count个对象到数组buffer中(相当于以对每个对象调用count次fgetc),把buffer当作unsigned char数组并顺序保存结果。流的文件位置指示器前进读取的字节数。
若出现错误,则流的文件位置指示器的位置不确定。若没有完整地读入最后一个元素,则其值不确定。
fread格式:
fread( void *buffer, size_t size, size_t count, FILE *stream )
fwrite() 是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。
fwrite格式:
fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
D.fscanf\fprintf
fscanf 其功能为根据数据格式(format),从输入流(stream)中读入数据,存储到argument中,遇到空格和换行时结束。
fscanf格式:
fscanf(FILE * stream, const char * format, [argument...])
fprintf()函数根据指定的格式(format),向输出流(stream)写入数据(argument)。
fprintf格式:
fprintf (FILE* stream, const char*format, [argument])
stream-- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
format-- 这是 C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
format 标签属性是%[flags][width][.precision][length]specifier
[argument]:附加参数列表
注意在格式中有读取长度的n时,系统会预留一个给’\0’,如果欲读取10个,则n在定义时,应该定义为10+1.
每一次文件引用结束后都要记得关闭打开了的文件
fclose(fp)//fp为定义的文件指针
-
将c语言的数据存到文件中
2021-05-24 01:38:52最近在工作中遇到需要将程序中的数据存到文件中,等下次开机可以读出来,我想到最好是可以结构化的存储,最好可以支持键值查询和匹配。本来想用xml实现这个功能。可是我用的交叉编译工具不支持xml解析器的交叉编译。...最近在工作中遇到需要将程序中的数据存到文件中,等下次开机可以读出来,我想到最好是可以结构化的存储,最好可以支持键值查询和匹配。本来想用xml实现这个功能。可是我用的交叉编译工具不支持xml解析器的交叉编译。于是我就只好自己利用周末的时间研究了一波。
现在在以经实现了基本的存储和读取功能,主要用的是文件流相关的操作函数实现的,像
fopen
fprintf
fwrite
flseek
fscanf
fread
fclose
我的想法是之间利用fwrite存结构体的方式,在结构体之间利用'$'符和‘>’符分割开方便监测,当然你存储的结构体元素不能包含指针,因为指针存到文件中是没有意义的。我的实现中数据结构体中必须包含名为name的字符数组,这有利于后期键值匹配的实现。
废话少说,下面是我的实现:
fwsStruct.c#include
#include
#include "fwsStruct.h"
Head *creat_head(void)
{
Head *head = (Head *)malloc(sizeof(Head));
head->next = NULL;
return head;
}
Node *creat_node(void)
{
return (Node *)malloc(sizeof(Node));
}
void list_append(Head *head,Node *node)
{
Node *temp;
if(head->next == NULL)
{
head->next = node;
node->next = NULL;
return;
}
else
temp = head->next;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = node;
node->next = NULL;
}
void list_insert(Node *p,Node *node)
{
node->next = p->next;
p->next = node;
}
void list_delete(Node *p)
{
Node *temp = p->next;
p->next = p->next->next;
free(temp);
}
Head *fwsStruct_perser(const char *path, const char *mode, void *data, size_t size)
{
FILE *fp;
char ch;
Node *node;
Head *head = creat_head();
if(head == NULL)
return NULL;
if((fp = fopen(path,mode)) == NULL)
{
return NULL;
}
while((ch = fgetc(fp)) >= 0)
{
if(ch == '$')
{
node = creat_node();
data = malloc(size);
if((node != NULL)&&(data != NULL))
{
if(fwsStruct_read(fp,data,size) == 1)
{
node->data = data;
list_append(head,node);
}
else
conTInue;
}
}
}
fclose(fp);
return head;
}
int fwsStruct_write(FILE *fp, void *data,size_t size)
{
fprintf(fp,"$\n");
if((fwrite(data,size, 1, fp)
return 0;
fprintf(fp,">\n");
return 1;
}
size_t fwsStruct_read(FILE *fp, void *data, size_t size)
{
fscanf(fp,"\n");
return fread(data,size, 1, fp);
}
size_t fwsStruct_append(FILE *fp, void *data, size_t size)
{
if(fseek(fp,SEEK_END,0)
return -1;
return fwsStruct_write(fp,data,size);
}
fwsStruct.h
#ifndef FWSSTRUCT_H_
#define FWSSTRUCT_H_
#include
#include
typedef struct node
{
struct node *next;
void *data;
}Node;
typedef struct
{
Node *next;
}Head;
Head *creat_head(void);
Node *creat_node(void);
void list_append(Head *head,Node *node);
void list_insert(Node *p,Node *node);
void list_delete(Node *p);
Head *fwsStruct_perser(const char *path, const char *mode, void *data, size_t size);
int fwsStruct_write(FILE *fp, void *data, size_t size);
size_t fwsStruct_read(FILE *fp, void *data, size_t size);
size_t fwsStruct_append(FILE *fp, void *data, size_t size);
#endif
写入结构体的测试代码:
#include
#include
#include
#include "fwsStruct.h"
struct work
{
char name[10];
char msg[100];
int id;
};
int main()
{
struct work wk;
FILE *fp;
int i;
strcpy(wk.name,"wang");
strcpy(wk.msg,"hello world!");
wk.id = 10;
if((fp = fopen("./batt.struct","w+")) == NULL)
{
printf("The file %s can not be opened or not exit.\n","batt");
return 0;
}
for(i = 0; i
{
fwsStruct_write(fp,&wk,sizeof(struct work));
}
fclose(fp);
return 0;
}
读出结构体的测试代码:
#include
#include
#include "fwsStruct.h"
struct work
{
char name[10];
char msg[100];
int id;
};
int main()
{
struct work *wk;
Node *node;
Head *head = creat_head();
head = fwsStruct_perser("./batt.struct","r",wk,sizeof(struct work));
node = creat_node();
node = head->next;
while(node != NULL)
{
wk = (struct work *)node->data;
printf("%s\n%s\n%d\n",wk->name,wk->msg,wk->id);
node = node->next;
}
return 0;
}
由于时间比较紧,没有时间写注释。另外键值匹配还没有实现。
-
如何用c语言实现删除文件中指定的数据;例如
2021-05-21 15:01:38匿名用户1级2012-05-21 回答你的描述不清晰,B1和B2两个结构数组,到底要删除哪个?B[2]是肯定不对的,这两个数组的长度都是2,下标只能是0和1,即B1[0], B1[1], B2[0], B2[1]。你还是先把问题说清楚了,这...数据在...匿名用户
1级
2012-05-21 回答
你的描述不清晰,B1和B2两个结构数组,到底要删除哪个?B[2]是肯定不对的,这两个数组的长度都是2,下标只能是0和1,即B1[0], B1[1], B2[0], B2[1]。
你还是先把问题说清楚了,这个程序不难写。
追问:
不好意思漏掉了! 是要删除B2[1].name 和 B2[1].point
麻烦大侠指教!
追答:
还不是很清楚,文件里存了哪几条数据?数据在B1和B2里是如何存放的。以B2为例,B2[0]或B2[1],每个里存放一条数据还是用链表串起来的多条数据?
我按如下的假设实现:
文件中vip的数据以文本方式存储(假设文件名为vip.txt),每一条数据存一个会员姓名和会员积分信息,用空格分给,每条记录结束是一个回车符。数据读取出来之后放入B2[1]为头的链表中,然后将B2[1]代表的数据删除(即第一条记录),把其余部分的数据重新写入到文件中。
前面的定义略
main()
{
FILE *fp;
struct vip *ptr, buf;
fp = fopen("vip.txt", "r");
if(fp == NULL) {
printf("Can not open file vip.txt\n");
exit(-1);
}
ptr = NULL;
/* 读取vip.txt中的数据,存放在B2[1]为头的链表中 */
while(fscanf(fp, "%s %d", buf.name, &buf.point) != EOF) {
if(ptr = NULL)
ptr = &B2[1];
else {
ptr->next = (struct vip *)malloc(sizeof(struct vip));
ptr = ptr->next;
}
strcpy(ptr->name, buf.name);
ptr->point= buf.point;
ptr->next = NULL;
}
fclose(fp);
/* 将文件中的内容显示在屏幕上 */
ptr = &B2[1];
while(ptr) {
printf("%s %d\n", ptr->name, ptr->point);
ptr = ptr->next;
}
/* 删除B2[1]的内容 */
fp = fopen("vip.txt", "w"));
if(fp == NULL) {
printf("Can not write file vip.txt\n");
/* 释放列表中分配的内存空间,很简单,实现略 */
exit(-2);
}
/* 删除第一条记录,用第二条记录的值代替第一条 */
ptr = B2[1]->next;
if(ptr != NULL) {
strcpy(B2[1].name, ptr->name);
B2[1].point = ptr->point;
B2[1].next = ptr->next;
free(ptr);
}
/* 将新的链表保存到文件中 */
ptr = &B2[1];
while(ptr) {
fprintf(fp, "%s %d\n", ptr->name, ptr->point);
ptr = ptr->next;
}
fclose(fp);
/* 释放分配的内存,实现略 */
}
-
c语言读取txt文件内容简单实例
2020-08-24 21:45:00在本篇文章里小编给大家整理的是关于c语言如何读取txt文件内容,需要的朋友们可以参考下。 -
信捷PLC C语言库程文件(64位数据)
2022-03-22 10:19:00信捷PLC C语言库 -
c语言从文件读取数据 C语言中怎么从文件中读取特定数据?
2021-05-21 05:41:29用C语言从txt文件中读取数据,可以使用C标准库文件自带的文件接口函数进行操作。 一、打开文件: FILE *fopen(const char *filename, const char *mode); 因为txt文件为文本文件, 所以打开时选择的mode应为"r"或者... -
c语言中关于使用fprintf在文件中写入数据的问题
2021-05-21 02:21:45实现用C语言在文件user.txt中输入几个用户的数据(包括姓名,年龄等)代码如下#includeint main(void){FILE*file1;int age;char name[25];char k;file1=fopen("user.txt","w");if(file1=NULL){printf("error opening")... -
C语言中怎么从文件中读取特定数据?
2021-05-25 05:41:06匿名用户1级2016-07-02 回答哥哥我想出的办法是这样的:因为兄弟文件格式是一行一行的, 且每行开头是一个关键字,然后后面是相应数据, 所以哥哥是这么想的, 比如要读"AB2345"这个关键字对应行的内容, 那首先用变量或者... -
C语言 使用文件输入/输出数据
2021-05-21 02:29:24帮数学系出C语言测试题,评测用到了Cena,但是Cena需要使用文件输入/输出,而他们不会,所以我就写了一份说明给他们,顺便发到博客上...C语言的文件操作参数很多,我就不一一列举了,我只把做题时要用到的几个函数... -
C语言进行GPS数据解析
2020-02-24 21:26:15GPS数据是一条条报文,如何把报文里面的经度、纬度、UTC时间,速度,卫星数,水平精度因子等信息提取出来呢?本文用C实现了对GPS数据的解析,包括GPGGA,GPRMC等的解析,用户可以根据具体需求来使用。 -
用C语言输出文件内所有数据
2021-05-24 05:28:26该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include "string.h... } 在我先用write函数输入两个同学的数据后,read函数只显示第一个同学的数据,为什么?要怎么改函数才能 输出所有同学的数据? -
C语言中文件操作中读写数据函数的应用.pdf
2021-09-19 14:27:05C语言中文件操作中读写数据函数的应用.pdf -
c语言把文件中数据读取并存到数组中
2021-05-19 20:26:03if(fp == NULL) { printf("文件读取无效.\n"); return -1; } for(i = 0; !feof(fp); i++) fscanf(fp, "%d", &a[i]); fclose(fp); for(i=0; i ; i++) printf("%d ", a[i]); printf("\n"); return 0; } int readfile... -
怎样用C语言从txt文件中读入数据?
2021-06-03 04:37:56有一点要注意如果你用的是TC之类的编译器,它是DOS下工作的不支持8个字符以上的长文件名,所以要用短名如:stud_r~1.txt#include "stdio.h"void main(){FILE *pf;char str[100];int i;for(i=0;i<100;i++) str[i..... -
c语言中如何修改文件中间的几个字节
2021-01-21 15:22:09w 这种方式打开的文件句柄,只能写,如果文件存在则将长度清零,否则新建文件,这种句柄通过seek之后,seek位置之前的文件数据全部变成0x00 w+ 同w选项,只不过多了一个可读功能 a 这种方式打开的文件,可以写,但是... -
C语言:添加和显示,数据保存在文件中,下次打开可以获取之前录入的内容
2021-05-21 16:17:41方法1:fgets和fputs#include #includeint main(int argc, char const *... //1.txt 文件名和路径 当运行 .c 文件和目标文件 1.txt在同一目录时可直接写文件名//"a+" 表示1.txt 可读写,写的时候在文件末尾开始写i... -
C语言中文件的存取方式是什么
2021-05-21 08:54:142011-05-27 回答首先,你的理解有点偏差,文件的存取方式不是由开发语言决定的,而是由文件系统决定的,linux是用c语言开发的,其文件系统的存取方式有三种 1. 顺序存取 顺序存取是按照文件的逻辑地址顺序存取。 ø ... -
C语言之利用文件保存数据
2021-12-24 14:00:451.从键盘输入一个字符串,将其中的小写字母全部转化成大写字母,然后输出到一个磁盘文件test中保存.输入的字符以"!"结束 需要在代码规定的地方新建一个文件,我这里是在桌面新建的 test.txt #define _CRT_SECURE_NO... -
C语言新建文件写入数据
2021-05-27 14:33:33C语言提供了fwrite()函数,用于往一个打开的文件指针中写入数据。函数的定义如下: size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); 函数说明:函数往stream文件指针指向的文件... -
C语言实现按行读写文件
2020-12-25 22:17:08本文实例为大家分享了C语言按行读写文件的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include #include #include void my_fputs(char* path) { FILE* fp = NULL; //"w+",读写方式...