当前位置:首页 » 密码管理 » c随机访问

c随机访问

发布时间: 2022-04-14 04:48:00

① 在c语言中fseek()的功能

fseek()是重定位流(数据流/文件)上的文件内部位置指针。

注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变或指向别的文件。

如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset取值大于等于2*1024*1024*1024,即long的正数范围2G),则不改变stream指向的位置,函数返回一个非0值。



(1)c随机访问扩展阅读:

注意事项

fseek函数的文件指针,应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。 fseek函数也可以这样理解,相当于在文件当中定位。

这样在读取规律性存储文件时可以利用其OFFSET偏移量读取文件上任意的内容。

fseek函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意只有fseek(fp, 0, SEEK_SET) 和 fseek(fp, ftell(fp), SEEK_SET)能确保结果符合预期。


② c语言的数组随机存取是什么意思

随机存取需要和顺序存取做一下比较,比较之后就明白了
比如给你一列纵队的人,让你找到位置为5的人,第一种方法是你从第一个位置开始一个一个往后找,直到找到位置为5的位置,这样的就是顺序存取
而如果你已经知道5的位置,不需要经过前面的四个位置直接到达位置为5的位置,那么这样的就是随机存取

③ c语言读写文件及随机问题,求大神,如题

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
usingnamespacestd;

classstaff
{
public:
stringname;//员工姓名
stringsex;//员工性别
stringbirthday;//出生日期
intage;//年龄
stringmarriage;//婚姻状况
stringaddress;//家庭住址
stringtitle;//职称
intsalary;//工资
staff()//构造函数
{
name='';
sex='';
birthday='';
age=0;
marriage='';
address='';
title='';//职称
salary=0;
}
voidsave_new()//保存员工信息到staff.txt
{
ofstreamoutData("staff.txt",ios::app);

if(!outData)
{
cout<<endl<<"对不起!!!打开文件失败!!!!"<<endl<<endl;
system("pause");
return;
}

outData<<setiosflags(ios::left)<<setw(8)<<name
<<""<<setw(6)<<salary
<<setw(3)<<sex<<""
<<setw(13)<<birthday<<""
<<setw(5)<<age<<""
<<setw(5)<<marriage<<""
<<setw(15)<<address<<""
<<setw(5)<<title<<endl;
outData.close();
}


voidadd_person()//添加员工信息
{
cout<<endl<<"根据下面提示录入职工信息"<<endl<<endl
<<"姓名:";
cin>>name;
cout<<"性别:";
cin>>sex;
cout<<"出生年月:";
cin>>birthday;
cout<<"年龄:";
cin>>age;
cout<<"婚姻状况:";
cin>>marriage;
cout<<"家庭住址:";
cin>>address;
cout<<"职称:";
cin>>title;
cout<<"工资:";
cin>>salary;

save_new();
cout<<endl<<endl<<"新的职工信息已经保存好!!!!!"<<endl;
}
};

intmain()
{
staffa,b,c,d,e;//定义五个员工对象
//输入员工信息
a.add_person();
b.add_person();
c.add_person();
d.add_person();
e.add_person();

ifstreamin("staff.txt");
staffs,k,j;
//读取第一个员工的信息
in>>s.name>>s.salary>>s.sex>>s.birthday>>s.age>>s.marriage>>s.address>>s.title;
//输出第一个员工的信息
cout<<setiosflags(ios::left)<<setw(8)<<s.name<<""<<setw(6)<<s.salary
<<setw(3)<<s.sex<<""<<setw(13)<<s.birthday<<""<<setw(5)<<s.age<<""
<<setw(5)<<s.marriage<<""<<setw(15)<<s.address<<""<<setw(5)<<s.title<<endl;
in.seekg(71,ios::cur);//光标移过员工类,到达第三个员工信息处,71是格式设置里面所有宽度之和

//读取第三个员工的信息
in>>k.name>>k.salary>>k.sex>>k.birthday>>k.age>>k.marriage>>k.address>>k.title;
//输出第三个员工的信息
cout<<setiosflags(ios::left)<<setw(8)<<k.name<<""<<setw(6)<<k.salary
<<setw(3)<<k.sex<<""<<setw(13)<<k.birthday<<""<<setw(5)<<k.age<<""
<<setw(5)<<k.marriage<<""<<setw(15)<<k.address<<""<<setw(5)<<k.title<<endl;
in.seekg(71,ios::cur);//光标移过员工类,到达第五个员工信息处

//读取第三个员工的信息
in>>j.name>>j.salary>>j.sex>>j.birthday>>j.age>>j.marriage>>j.address>>j.title;
//输出第三个员工的信息
cout<<setiosflags(ios::left)<<setw(8)<<j.name<<""<<setw(6)<<j.salary
<<setw(3)<<j.sex<<""<<setw(13)<<j.birthday<<""<<setw(5)<<j.age<<""
<<setw(5)<<j.marriage<<""<<setw(15)<<j.address<<""<<setw(5)<<j.title<<endl;
in.close();
}

④ C语言中,顺序反问和随机反问之间有什么区别

什么反问,访问吧。
简单点说,顺序访问只能从文件流的头开始往后读。
随机访问就是可以到流的任意位置开始操作。

⑤ C语言中,顺序反问和随机反问之间的区别!

你想问的是不是顺序访问和随机访问的区别啊?

举个例子来说吧,如果你要找第10个数,
如果是顺序访问的话,你必须先找到第一个数,再找第二个数,然后第三个数,这样下去,直到第10个数

但如果是随机访问的话,你直接按照这个数的序号10就可以找到他了。

⑥ C++中支持随机访问的容器有哪些

1、vector
连续存储结构,每个元素在内存上是连续的;
支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除操作效率低下;
2、deque
连续存储结构,即其每个元素在内存上也是连续的,类似于vector,不同之处在于,deque提供了两级数组结构,第一级完全类似于vector,代表实际容器;另一级维护容器的首位地址。
这样,deque除了具有vector的所有功能外,还支持高效的首端插入/删除操作。
3、list
非连续存储结构,具有双链表结构,每个元素维护一对前向和后向指针,因此支持前向/后向遍历。
支持高效的随机插入/删除操作,但随机访问效率低下,且由于需要额外维护指针,开销也比较大。
4、vector
V.S.
list
V.S.
deque:
a、若需要随机访问操作,则选择vector;
b、若已经知道需要存储元素的数目,
则选择vector;
c、若需要随机插入/删除(不仅仅在两端),则选择list
d、只有需要在首端进行插入/删除操作的时候,才选择deque,否则都选择vector。
e、若既需要随机插入/删除,又需要随机访问,则需要在vector与list间做个折中。
f、当要存储的是大型负责类对象时,list要优于vector;当然这时候也可以用vector来存储指向对象的指针,同样会取得较高的效率,但是指针的维护非常容易出错,因此不推荐使用。
5、capacity
V.S
size
a、capacity是容器需要增长之前,能够盛的元素总数;只有连续存储的容器才有capacity的概念(例如vector,deque,string),list不需要capacity。
b、size是容器当前存储的元素的数目。
c、vector默认的容量初始值,以及增长规则是依赖于编译器的。
6、用vector存储自定义类对象时,自定义类对象须满足:
a、有可供调用的无参构造函数(默认的或自定义的);
b、有可用的拷贝赋值函数(默认的或自定义的)
7、迭代器iterator
a、vector与deque的迭代器支持算术运算,list的迭代器只能进行++/--操作,不支持普通的算术运算。

⑦ c语言怎么随机读取文本文件

你好!
·如果是保存在文本内,那需要下面几步:
1、将所有的文本行名单读出到数组,并统计一共的行数
2、根据一共的行数,产生一共随机数
3、根据随机数显示出名单

⑧ c语言怎么随机的读取磁盘文本文件

你的用变量path作为文件绝对路径,你每次要将它的值改变,而你的文件位置是保持不变的,这样当然读不到文件。你要保持同步,就是说path的值发生改变是就要同时把文件给重命名了,给文件重命名用rename()函数,函数原型:int rename(char *lpOldName,char *lpNewName);第一个参数是文件原名,第二个是重命名后的文件名,若重命名成功返回1,否则返回0。头文件stdio.h或io.h。还有要说你上面的代码有错,char path[20]="c:\\"; //你忘记了转义字符而且你应该从path[3]开始赋值,因为"c:\\"除去一个空字符就只有3个字符,下标是从0开始的(\\是一个字符)继续追问: 来自手机问问 文件都在一个文件夹里面,直接改变对应的路径是不是能直接读取到对应的文件呢?我想产生一个随机的路径,而这个随机只在文件名上体现 补充回答: 来自手机问问 知道你的意思,你是是比如文件是c:\test.txt,然后随机名是c:\t138.txt。这就对了,重命名可以不改变文件所在目录啊,比如这样调:rename("c:\\test.txt","c:\\t138.txt");
文件名就由test.txt变成了t138.txt,而所在目录并没有发生变化。 继续追问: 来自手机问问 那怎么才能展现随机读取呢?新手,包含。 补充回答: 来自手机问问 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char path[]="C:\\ff.txt";
char rname[2];
FILE *fp;
/*产生10~20的随机数*/
srand((unsigned)time(NULL));
/*将整数转换成字符串*/
itoa(rand()%20+10,rname,10);
path[2]=rname[0];
path[3]=rname[1];
/*重命名文件*/
rename("C:\\ff.txt",path);
fp=fopen(path,"r");
if(fp==NULL)
{
printf("Open the file failed.\n");
}
else
{
printf("Open the file succed.\n");
}
return 0;
}
这段代码演示了c盘原来有一个ff.txt文件,后来被随机重命名为**.txt,程序去读取。
运行程序前要保证c盘存在ff.txt文件。 继续追问: 来自手机问问 还是那样,编译报错,哎,谢了 补充回答: 来自手机问问 我vc6编译通过啊,你什么编译器? 继续追问: 来自手机问问 一样。可能有地方写错了。 补充回答: VC6.0编译通过啊,可以稍微改一下: 补充回答: #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{ char path[]="C:\\ff.txt";
char rname[2];
FILE *fp; /*产生10~20的随机数*/
srand((unsigned)time(NULL));
/*将整数转换成字符串*/
itoa(rand()%20+10,rname,10);
path[3]=rname[0];
path[4]=rname[1];
/*重命名文件*/
rename("C:\\ff.txt",path);
fp=fopen(path,"r");
if(fp==NULL)
{
printf("Open the file failed.\n");
}
else
{
printf("Open the file succed.\n");
}
return 0;
}

⑨ c语言练习题 求答

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<stdbool.h>
//节点
typedefstructListNode{
intdata;
structListNode*prev;//前节点
structListNode*next;//后节点
}LIST_NODE;

//链表
typedefstructList
{
LIST_NODE*head;//头指针
LIST_NODE*tail;//尾指针
}LIST;

//创建节点
staticLIST_NODE*create_node(intdata,LIST_NODE*prev,LIST_NODE*next)
{
LIST_NODE*node=(LIST_NODE*)malloc(sizeof(LIST_NODE));
node->data=data;
node->prev=prev;
node->next=next;
returnnode;
}

//销毁节点,返回该节点的next,和通过prev参数返回该节点prev
staticLIST_NODE*destroy_node(LIST_NODE*node,LIST_NODE**prev)
{
if(prev)
{
*prev=node->prev;
}
LIST_NODE*next=node->next;
free(node);
returnnext;
}

//初始化空链表
voidlist_init(LIST*list)
{
list->head=NULL;
list->tail=NULL;
}

//释放剩余节点并恢复到初始状态
voidlist_deinit(LIST*list)
{
LIST_NODE*node=NULL;
while(list->head)
{
list->head=destroy_node(list->head,NULL);
}
list->tail=NULL;
}

//判断是否空
boollist_empty(LIST*list)
{
return!list->head&&!list->tail;
}

//追加
voidlist_append(LIST*list,intdata)
{

list->tail=create_node(data,list->tail,NULL);
if(list->tail->prev)
{
list->tail->prev->next=list->tail;
}
else
{
list->head=list->tail;
}
}

//前插入,指定位置之前插入
boollist_insert(LIST*list,size_tpos,intdata)
{
LIST_NODE*find=NULL;
for(find=list->head;find;find=find->next)
{
if(!pos--)
{
LIST_NODE*node=create_node(data,find->prev,find);

if(node->prev)
{
node->prev->next=node;//find不为第一个节点时,新建节点的前一个节点的next应该指向node这个节点
}
else
{
list->head=node;//find为第1个节点时,新插入的节点就是新节点
}
node->next->prev=node;
returntrue;
}
}
returnfalse;
}

//随机访问
int*list_at(LIST*list,size_tpos)
{
LIST_NODE*find=NULL;
for(find=list->head;find;find=find->next)
{
if(!pos--)
{
return&(find->data);
}
}
returnNULL;
}

//删除指定位置节点
boollist_erase(LIST*list,size_tpos)
{
LIST_NODE*find=NULL;
for(find=list->head;find;find=find->next)
{
if(!pos--)
{
LIST_NODE*prev=NULL;
LIST_NODE*next=destroy_node(find,&prev);
//删除的节点是第一个节点,它的prve就为NULL,那么它的next节点就是头节点
if(prev)
{
prev->next=next;
}
else
{
list->head=next;
}
//删除的节点是最后一个节点,它的next就为NULL,那么它的前prev节点就是尾节点
if(next)
{
next->prev=prev;
}
else
{
list->tail=prev;
}
returntrue;
}
}
returnfalse;
}

//删除所有匹配数据
voidlist_remove(LIST*list,intdata)
{
LIST_NODE*find=NULL,*next=NULL;
for(find=list->head;find;find=next)
{
next=find->next;
if(data==find->data)
{
LIST_NODE*prev=NULL;
LIST_NODE*next=destroy_node(find,&prev);
if(prev)
{
prev->next=next;
}
else
{
list->head=next;
}
if(next)
{
next->prev=prev;
}
else
{
list->tail=prev;
}
}
}
}

//清空链表
voidlist_clear(LIST*list)
{
list_deinit(list);
}

//获取大小
size_tlist_size(LIST*list)
{
size_tsize=0;
LIST_NODE*node=NULL;
for(node=list->head;node;node=node->next)
{
++size;
}
returnsize;
}


voidprint(LIST*list)
{
//时间复杂度平方级,for循环执行一次list_at会循环链表一次
size_tpos,size=list_size(list);
for(pos=0;pos<size;pos++)
{
printf("%d",*list_at(list,pos));
}
printf(" --------------- ");

}

voidtest1()
{
LISTlist;
list_init(&list);
list_append(&list,10);
list_append(&list,30);
list_append(&list,50);
print(&list);//103050

list_insert(&list,1,20);
list_insert(&list,3,40);
print(&list);//1020304050

list_erase(&list,2);
list_erase(&list,3);
print(&list);//102040

list_append(&list,20);
list_insert(&list,0,20);
list_insert(&list,4,20);
print(&list);//2010204020

list_remove(&list,20);
print(&list);//1040
list_deinit(&list);
}

intmain()
{
test1();
return0;
}

⑩ C语言如何随机读取5个TXT文件数据

给你一个思路
先把文本中所有数据总数计算出来, 比如N
然后,随机五个不重复的0~N-1之间的数
从文本中读取数据, 符合之前随机五个数序号的, 就留下。

如果数据规模不大, 第一次就可以全读出来存成数组,然后直接访问数组就好。

热点内容
竖编译 发布:2025-05-17 09:56:08 浏览:227
编程画飞机 发布:2025-05-17 09:54:03 浏览:800
手机如何解锁密码屏幕锁怎么删除 发布:2025-05-17 09:52:04 浏览:123
网络无法访问网页 发布:2025-05-17 09:51:40 浏览:649
云存储box估值 发布:2025-05-17 09:47:11 浏览:511
关系数据库实时数据库 发布:2025-05-17 09:43:07 浏览:875
去培训编程 发布:2025-05-17 09:41:16 浏览:701
android控制屏幕关闭 发布:2025-05-17 09:32:23 浏览:148
excel的快速访问工具栏 发布:2025-05-17 09:14:58 浏览:2
android360源码 发布:2025-05-17 09:11:47 浏览:77