① c語言:這兩個語句什麼意思 fseek(fp,0L,0); fprintf(fp,"%d\n",a
fseek函數設置文件指針stream的位置。如果執行成功,stream將指向以fromwhere為基準,偏移offset(指針偏移量)個位元組的位置,函數返回0。
fprintf是C/C++中的一個格式化寫—庫函數,位於頭文件<stdio.h>中,其作用是格式化輸出到一個流/文件中;函數原型為int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函數根據指定的格式(format)向輸出流(stream)寫入數據(argument)。
② 在c語言中,fseek(fp,sizeof(int)*3,0)是什麼意思
int fseek(FILE *stream, long offset, int fromwhere);函數設置文件指針stream的位置。
如果執行成功,stream將指向以fromwhere為基準,偏移offset(指針偏移量)個位元組的位置,函數返回0。如果執行失敗(比如offset超過文件自身大小),則不改變stream指向的位置,函數返回一個非0值。
函數設置文件指針stream的位置。如果執行成功,stream將指向以fromwhere(偏移起始位置:文件頭0(SEEK_SET),當前位置1(SEEK_CUR),文件尾2(SEEK_END))為基準,偏移offset(指針偏移量)個位元組的位置。如果執行失敗(比如offset超過文件自身大小),則不改變stream指向的位置。
fseek函數和lseek函數類似,但lseek返回的是一個off_t數值,而fseek返回的是一個整型。
所以,fseek(fp,sizeof(int)*3,0)函數將文件指針指向從文件開頭,向後偏移3個int單元的地方。
③ 在C語言中fseek()的功能
fseek()是重定位流(數據流/文件)上的文件內部位置指針。
注意:文件指針指向文件/流。位置指針指向文件內部的位元組位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變或指向別的文件。
如果執行成功,stream將指向以fromwhere為基準,偏移offset(指針偏移量)個位元組的位置,函數返回0。如果執行失敗(比如offset取值大於等於2*1024*1024*1024,即long的正數范圍2G),則不改變stream指向的位置,函數返回一個非0值。
(3)c語言函數調用語句fseek擴展閱讀:
注意事項
fseek函數的文件指針,應該為已經打開的文件。如果沒有打開的文件,那麼將會出現錯誤。 fseek函數也可以這樣理解,相當於在文件當中定位。
這樣在讀取規律性存儲文件時可以利用其OFFSET偏移量讀取文件上任意的內容。
fseek函數一般用於二進制文件,也可以用於文本文件。用於文本文件操作時,需特別注意只有fseek(fp, 0, SEEK_SET) 和 fseek(fp, ftell(fp), SEEK_SET)能確保結果符合預期。
④ C語言中,fseek函數怎麼控制移動的方向怎麼往前或往後,最好能有個例子。 謝謝!
fseek有三個參數,第1個是文件句柄,通過打開文件時得到;第2個就是移動的位元組數,這個數可以是正的,就是向後(文件尾部)移動,也可以是負的,即向前(文件頭部)移動;第3個參數指明從哪裡移動,如果寫SEEK_SET就是從文件頭部移動多少位元組,如果寫SEEK_END則是從尾部開始移動,SEEK_CUR則是從當前位置移動。
比如
要將文件指針移動到文件開始的第24位元組位置:fseek(fp,24,SEEK_SET);
移動到文件尾部向前50位元組:fseek(fp,-50,SEEK_SET);
在當前位置移動8個位元組(跳過8個位元組數據):fseek(fp,8,SEEK_CUR);
在當前位置向前移動16個位元組(准備重新讀取數據):fseek(fp,-16,SEEK_CUR);
⑤ C語言fseek 問題
#include<stdio.h>
intmain(void){
FILE*stream;
intc,n=0,filesize;
stream=fopen("MYFILE.TXT","wt");
fprintf(stream,"Thisisatest ");
fclose(stream);
stream=fopen("MYFILE.TXT","r+");
while(n<4){
filesize=0;
while((c=fgetc(stream))!=EOF){
printf("%c",c);
++filesize;
}
fseek(stream,-(++filesize),SEEK_CUR);
fseek(stream,0,SEEK_CUR);
++n;
}
fclose(stream);
return0;
}
*****fseek(stream,0,SEEK_CUR); *****
這一句很重要(專家說的),用來改變文件的讀狀態(我也不明白這個狀態),在修改數據文件時,這一句貌似廢話的話所起的作用更是重要了。
⑥ C語言關於fseek函數。
中文文件要用TCHAR之類的多位元組方法處理。
你的方法是把中文看成2進制一個字元一個字元的數據文件來處理,也是可以的,fseek工作完全正常,
問題是輸出字元的顯示,你可以顯示每個位元組的值,但不能顯示成肉眼可識別的漢字。
putchar ( ch ); 可用於 ASCII字元。
你可以換成: printf("%02x ", 0xff & ch ); 可以顯示單個位元組的碼值。從輸出的碼值可以看出,程序沒有問題,只是不能顯示成肉眼可識別的漢字。
另外,如果是unicode中文文件,則文件頭有不可見的文件類型區分碼0xfe 0xff 或 0xff 0xfe 等等。
2個單個位元組碼,合成一個雙位元組碼,有大端和小端文件問題,也許需要互相交換相鄰2個位元組,再顯示成中文。
⑦ 求助一道C語言問題
int fseek(FILE *stream, long offset, int fromwhere);
其中fromwhere起始點:
起始點名 代表數字 含義
SEEK_SET0 文件開頭
SEEK_CUR 1 文件當前位置
SEEK_END 2 文件末尾
offset 偏移量,表示把與fp有關的文件位置指針放在與起始點相距多少的位置上
當offset為正時,表示從「起始點」開始往文件尾方向移動
為負時,表示從「起始點」開始往文件頭方向移動
所以,fseek(fp,10,2)意思是將與fp相關的指針移到文件末尾再向後10比特位處,但是,此時偏移量已經超出文件尾,文件指針是指向文件尾的。最終的結果就是與fp相關的指針移到文件末尾
⑧ 請問C語言對文件的讀取有哪些函數,都有什麼功能像fseek();fscanf();fread......什麼的
C語言文件操作函數
13.1C語言文件
1,兩種文件存取方式(輸入,輸出方式)
順序存取
直接存取
2,數據的兩種存放形式
文本文件
二進制文件
13.2文件指針
定義文件類型指針變數的一般形式:
FILE *指針變數名;
例如:
FILE *fp1,*fp2;
13.3打開文件
在使用文件之前,需打開文件.在C里使用fopen函數打開文件.格式為:
fopen(文件名,文件使用方式);
此函數返回一個指向FILE類型的指針.如:
FILE *fp;
fp=fopen("file_1","r");
如果調用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進行測試.採用如下語句:
If((fp=fopen("file_1","r"))==NULL)
{
printf("Cannot open this file\n");
exit(0);
}
最常用的文件使用方式及其含義如下:
1,"r".為讀而打開文本文件.(不存在則出錯)
2,"rb".為讀而打開二進制文件.
3,"w".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)
4,"wb".為寫而打開二進制文件.
5,"a".為在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加)
6,"ab".為在文件後面添加數據而打開一個二進制文件.
最常用的文件使用方式及其含義如下:
7,"r+".為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變)
8,"rb+".為讀和寫而打開二進制文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
9,"w+".首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失)
10,"wb+".功能與"w+"同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
最常用的文件使用方式及其含義如下:
11,"a+".功能與"a"相同;只是在文件尾部添加新的數據後,可以從頭開始讀.
12,"ab+".功能與"a+"相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置.
13.4關閉文件
當文件的讀寫操作完成之後,使用fclose函數關閉文件.格式如下:
fclose(文件指針)
如:fclose(fp);
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
1,調用putc(或fputc)函數輸出一個字元
調用形式為:
putc(ch,fp);
功能是:將字元ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字元;否則,返回一個EOF值.EOF是在stdio.h庫函數文件中定義的符號常量,其值等於-1.
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字元@作為鍵盤輸入結束標志.
#include
Void main()
{
FILE *fpout;
char ch;
if(fpout=fpopen("file_1","w")==NULL)
{
printf("Cannot open this file!\n");
exit(0);
}
ch=getchar();
while(ch!='@')
{ fputc(ch,fpout); ch=getchar(); }
fclose(fpout);
}
2.調用getc(或fgetc)函數輸入一個字元
調用形式為:
ch=getc(pf);
功能是:從pf指定的文件中讀如一個字元,並把它作為函數值返回.
例如:把一個已存在磁碟上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上.
#include
void main(){
FILE *fpin;
char ch;
if((fpin=fopen("file_1.dat","r"))==NULL)
{ printf("Cann't open this file!\n");exit(0);}
ch=fgetc(fpin);
while (ch!=EOF)
{ putchar(ch); ch=fgetc(fpin);}
fclose(fpin);
}
13.6判斷文件結束函數feof
EOF可以作為文本文件的結束 標志,但不能作為二進制文件的結束符.feof函數既可以判斷二進制文件,又可以判斷文本文件.
例:編寫程序,用於把一個文本文件(源)復制到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:
可執行程序名 源文件名 目的文件名
#include
void file(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
if(argc==3)
{ fpin=fopen(argv[1],"r");
fpout=fopen(argv[2],"w");
file(fpin,fpout);
fclose(fpin);fclose(fpout);
}
else if(argc>3)
printf("The file names too many!!\n";
else
printf("There are no file names for input or output!!\n );
}
void file(FILE *fpin,FILE *fpout)
{
char ch;
ch=getc(fpin);
while(!feof(fpin))
{putc(ch,fpout); ch=getc(fpin);}
}
13.7fscanf函數和fprintf函數
1,fscanf函數
fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁碟上文本文件中的數據.調用形式為:
fscanf(文件指針,格式控制字元串,輸入項表)
例如:fscanf(fp,"%d%d",&a,&b);
fscanf(stdin,"%d%d",&a,&b);
等價於scanf("%d%d",&a,&b);
3.fprintf函數
fprintf函數按格式將內存中的數據轉換成對應的字元,並以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是將輸出的內容按格式存放到磁碟的文本文件中.調用形式如下:
fprintf(文件指針,格式控制字元串,輸出項表)
如:fprintf(fp,"%d %d",x,y);
以下語句 fprintf(stdout,"%d %d",x,y)
13.8fgets函數和fputs函數
1,fgets函數
fgets函數用來從文件中讀入字元串.調用形式如下:
fgets(str,n,fp);
函數功能是:從fp所指文件中讀入n-1個字元放入str為起始地址的空間內;如果在未讀滿n-1個字元時,則遇到換行符或一個EOF結束本次讀操作,並已str作為函數值返回.
13.8fgets函數和fputs函數
2,fputs函數
fput函數把字元串輸出到文件中.函數調用形式如下:
fputs(str,fp);
注意:為了便於讀入,在輸出字元串時,應當人為的加諸如"\n"這樣的字元串.
#include <stdio.h>
#include <iostream>
int main(int argc, char *argv[])
{
char arr[10] ;
char *ap = "hello!" ;
FILE *fp ;
if ((fp = fopen("hello.txt", "wt+")) == NULL)
{
printf("error!") ;
exit(1) ;
}
fputs(ap, fp) ;
rewind(fp) ; //
fgets(arr, 10, fp) ;
printf("%s\n", arr) ;
fclose(fp) ;
return 0 ;
}
13.9fread函數和fwrite函數
例如有如下結構體:
struct st{
char num[8];
float mk[5];
}pers[30];
以下循環將把這30個元素中的數據輸出到fp所指文件中.
for(i=0;i<30;i++)
fwrite(&pers[i],sizeof(struct st),1,fp);
13.9fread函數和fwrite函數
以下語句從fp所指的文件中再次將每個學生數據逐個讀入到pers數組中.
i=0;
fread(&pers[i],sizeof(struct st),1,fp);
while(!feof(fp))
{ i++;
fread(&pers[i],sizeof(struct st),1,fp);
}
13.10文件定位函數
1,fseek函數
fseek函數用來移動文件位置指針到指定的位置上,接著的讀或寫操作將從此位置開始.函數的調用形式如下:
fseek(pf,offset,origin)
pf:文件指針
offset:以位元組為單位的位移量,為長整形.
origin:是起始點,用來指定位移量是以哪個位置為基準的.
1,fseek函數
位移量的表示方法
標識符 數字 代表的起始點
SEEK_SET 0 文件開始
SEEK_END 2 文件末尾
SEEK_CUR 1 文件當前位置
假設pf已指向一個二進制文件,則;
fseek(pf,30L,SEEK_SET)
fseek(pf,-10L*sizeof(int),SEEK_END)
對於文本文件,位移量必須是0;如:
fseek(pf,0L,SEEK_SET)
fseek(pf,0L,SEEK_END)
2. ftell函數
ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對於文件開頭的位元組數.如;
long t;
t=ftell(pf);
當函數調用出錯時,函數返回-1L.
我們可以通過以下方式來測試一個文件的長度:
fseek(fp,0L,SEEK_END);
t=ftell(fp);
3.rewind函數
調用形式為:
rewind(pf);
函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.
13.10文件應用
在磁碟上的test.txt文件中放有10個不小於2的正整數,用函數調用方式編寫程序.要求實現:
1,在被調函數prime中,判斷和統計10個整數中的素數以及個數.
2,在主函數中將全部素數追加到磁碟文件test.txt的尾部,同時輸出到屏幕上.
#include
#include
Int prime(int a[],int n)
{
int I,j,k=0,flag=0;
for(i=0;i { for(j=2;j if(a[i]%j==0)
{ flag=0; break;}
else flag=1;
if(flag)
{a[k]=a[i];k++;}
}
return k;
}
void main(){
int n,I,a[10];
FILE *fp;
fp=fopen("test1-2.txt","r+");
for(n=0;n<10;n++)
fscanf(fp,"%d",&a[n]);
n=prime(a,n);
fseek(fp,o,2);
for(i=0;i {printf("%3d",a[i]);
fprintf(fp,"%3d",a[i]);
}
fclose(fp);
⑨ C語言ab+方式打開文件以及fseek函數
打開文件可以用fopen。
函數原型:FILE * fopen(const char * path,const char * mode);
返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。
一般而言,打開文件後會做一些文件讀取或寫入的動作,若打開文件失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()後作錯誤判斷及處理。
打開文件實例:
#include<stdio.h>
#define F_PATH "d:\\myfile\\file.dat"
int main(void)
{
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"ab+");
if(NULL==fp)
{
return -1;//要返回錯誤代碼
}
fclose(fp);
fp=NULL;//需要指向空,否則會指向原打開文件地址
return 0;
}
fseek函數功能:重定位流(數據流/文件)上的文件內部位置指針
注意:文件指針指向文件/流。位置指針指向文件內部的位元組位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變指向別的文件
int fseek(FILE *stream, long offset, int fromwhere);
參數:stream 文件指針,fromwhere起始基準點,offset在基準點的基礎上的偏移量。
返回值:成功,返回0,失敗返回-1,並設置errno的值,可以用perror()函數輸出錯誤。
實例:
#include <stdio.h>
long filesize(FILE*stream);
int main(void)
{
FILE *stream;
stream=fopen("MYFILE.TXT","w+");
fprintf(stream,"Thisisatest");
printf("FilesizeofMYFILE.TXTis%ldbytes\n",filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE*stream)
{
long curpos,length;
curpos=ftell(stream);
fseek(stream,0L,SEEK_END);
length=ftell(stream);
fseek(stream,curpos,SEEK_SET);
return length;
}
⑩ C語言中關於fseek函數的疑問
程序發出來看看?
=====================
由於你的程序我不能運行,根據程序分析會不會是這種情況導致,
你的文件是當時結構體形式存的,這樣,讀取的時候也都是有相應的格式,
fseek這個就是將文件指針移到相應的位置.是不是移了後,移了後,和你想取的值對不上了導致的啊.
比如,1\tname\t2
你移到了name的位置,但是你按整型取.會不會是這樣造成?
另外,第二次讀文件的時候
fscanf(fp1,"%d\t",bj[f]);
bj[f]前沒取地址