當前位置:首頁 » 密碼管理 » 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 01:59:35 瀏覽:396
java堆棧的區別 發布:2025-05-17 01:57:26 瀏覽:968
安卓手機如何打開pbo文件 發布:2025-05-17 01:56:11 瀏覽:593
檢測壓縮包 發布:2025-05-17 01:43:18 瀏覽:702
千牛圖片壓縮 發布:2025-05-17 01:36:20 瀏覽:430
不能存儲手機號怎樣修理 發布:2025-05-17 01:08:38 瀏覽:759
hw存儲 發布:2025-05-17 00:50:56 瀏覽:346
wifi密碼為什麼顯示不能連接呢 發布:2025-05-17 00:46:45 瀏覽:460
安卓車載軟體哪個好 發布:2025-05-17 00:30:42 瀏覽:498
商城網站免費源碼 發布:2025-05-17 00:13:09 瀏覽:704