當前位置:首頁 » 編程語言 » c語言讀取文件信息
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言讀取文件信息

發布時間: 2022-06-30 09:01:35

『壹』 c語言讀取文本文件

1、C語言標准庫提供了一系列文件操作函數。文件操作函數一般以f+單詞的形式來命名(f是file的簡寫),其聲明位於stdio.h頭文件當中。例如:fopen、fclose函數用於文件打開與關閉;fscanf、fgets函數用於文件讀取;fprintf、fputs函數用於文件寫入;ftell、fseek函數用於文件操作位置的獲取與設置。
2、常式:

#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.txt","r");//打開輸入文件
FILE*fp2=fopen("output.txt","w");//打開輸出文件
if(fp1==NULL||fp2==NULL){//若打開文件失敗則退出
puts("不能打開文件!");
rturn0;
}
fscanf(fp1,"%d",&a);//從輸入文件讀取一個整數
b=fgetc(fp1);//從輸入文件讀取一個字元
fgets(c,100,fp1);//從輸入文件讀取一行字元串

printf("%ld",ftell(fp1));//輸出fp1指針當前位置相對於文件首的偏移位元組數

fputs(c,fp2);//向輸出文件寫入一行字元串
fputc(b,fp2);//向輸出文件寫入一個字元
fprintf(fp2,"%d",a);//向輸出文件寫入一個整數

fclose(fp1);//關閉輸入文件
fclose(fp2);//關閉輸出文件,相當於保存
return0;
}

『貳』 C語言如何讀取文件

一個c語言讀寫文件程序:
#include
"stdio.h"
#include
<stdlib.h>
main()
{
FILE
*fp1;//定義文件流指針,用於打開讀取的文件
FILE
*fp2;//定義文件流指針,用於打開寫操作的文件
char
text[1024];//定義一個字元串數組,用於存儲讀取的字元
fp1
=
fopen("d:\\a.txt","r");//只讀方式打開文件a.txt
fp2
=
fopen("d:\\b.txt","w");//寫方式打開文件a.txt
while(fgets(text,1024,fp1)!=NULL)//逐行讀取fp1所指向文件中的內容到text中
{
puts(text);//輸出到屏幕
fputs(text,fp2);//將內容寫到fp2所指向文件中
}
fclose(fp1);//關閉文件a.txt,有打開就要有關閉
fclose(fp2);//關閉文件b.txt
}

『叄』 利用C語言讀取含文件頭的txt文本並將學生信息和成績分別保存到數組

思路:

1、fgets每次讀取一行,根據文本格式找到姓名和分數的行字元串。

2、分別解析行字元串,獲取其中的姓名和成績(成績字元串拆解後用atof函數轉換成浮點數保存在浮點數數組中)。

3、通過malloc和realloc申請一個對應大小的結構數組(你題目要求用數組,換成鏈表更好)

4、將解析的數據保存到結構數組成員中。

注意:代碼是根據你提供的樣本格式解析的,如格式發生改變,需自行修改條件

注意:你成績之後內容沒有貼出來,所以成績內容到哪裡為結束,我只能參照姓名的個數。如成績行數比姓名行數多,多餘的會被忽略。

下面是我寫得演示代碼,已詳細備注(注意我的函數你如想單獨調用,注意free釋放內存):

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#define M 1000 //預估一行最大字元數,必須大於等於文本一行最大長度

#define S 5 //預讀取的成績科目數量

int slen=0;//學生人數

typedef struct student

{

char *name;//姓名

float *scores;//成績數組

}STU;

/*getaLine每調用一次讀取一行字元串(返回的是動態申請地址,如你要單獨調用該函數,記得free釋放)

函數用靜態變數記錄文件指針偏移量。參數傳非0每次調用往下行讀取,參數傳0從第一行重新讀取

讀取成功返回字元串首地址,失敗或者讀取到文件末尾返回NULL

*/

char *getaLine();

/*

getName截取名字,注意該函數只是截取,多餘字元空間沒有刪除,如單獨調用該函數自行處理地址空間。

參數傳入包含名字的那一行字元串,根據內容規則遇到第一個數字就在前一個字元置0

成功返回處理後的字元串首地址,失敗返回NULL

*/

char *getName(char *nameStr);

float *getScores(char *scoreStr);//通過字元串空格分隔格式截取各科成績,重組浮點數數組返回。異常返回NULL

STU *getNamesAndScore();

int main()

{

int i,j;

STU *stus=NULL;

stus=getNamesAndScore();

if(!stus) return 1;

for(i=0;i<slen;i++)

{

printf("姓名:%s ",stus[i].name);

for(j=0,printf("成績:");j<S;j++)

printf("%.2f ",stus[i].scores[j]);

printf(" ");

}

return 0;

}

STU *getNamesAndScore()

{

int flag=0,n=1,scnt=0;

STU *stups=NULL,*spTemp=NULL;

char *sLine=NULL;

while(1)

{

sLine=getaLine(1);

if(!sLine) break;//文件讀取到末尾或異常

if(sLine[0]=='#' && sLine[1]=='-' && sLine[2]=='-' && sLine[3]=='-'&& sLine[4]=='-'&& sLine[5]=='-')

{

flag++;

continue;

}

if(flag==2 && sLine[0]=='~' && sLine[1]=='A' && sLine[2]==' ' && sLine[3]=='C' && sLine[4]=='h'&& sLine[5]=='i')

{

continue;

}

if(flag==0) continue;

if(flag==1)//開始讀取姓名

{

if(!stups)

{

stups=(STU *)malloc(sizeof(STU));

if(!stups) return NULL;

}

else

{

n++;

spTemp=(STU *)realloc(stups,sizeof(STU)*n);

if(!spTemp) return NULL;

stups=spTemp;

}

slen++;

getName(sLine);

stups[n-1].name=(char *)malloc(sizeof(char)*(strlen(sLine)+1));

strcpy(stups[n-1].name,sLine);

free(sLine);

}

if(flag==2)//開始讀取成績

{

scnt++;

stups[scnt-1].scores=getScores(sLine);

if(!stups[scnt-1].scores)return NULL;

if(scnt==slen) break;//確保成績和姓名個數匹配,只讀對應行數的成績

}

}

return stups;

}

float *getScores(char *scoreStr)

{

int n=0;

char *p0=scoreStr,*p1=scoreStr;

float *scs=NULL;

scs=(float *)malloc(sizeof(float)*S);

if(!scs)return NULL;

while(*p1!=0)

{

if(*p1==' ')

{

*p1=0;

scs[n++]=atof(p0);

p0=p1+1;

}

p1++;

}

scs[n]=atof(p0);

return scs;

}

char *getName(char *nameStr)

{

char *p=nameStr;

if(!nameStr)return NULL;

while(*p!=0)

{

if(*p>='0' && *p<='9')

{

*(p-1)=0;

break;

}

p++;

}

return nameStr;

}

char *getaLine(int origin)

{

static long offsetSave=0;

int len=0;

char strTemp[M]={0},*rp=NULL,*sLine=NULL;

FILE *fp=NULL;

if(!origin) offsetSave=0;

fp=fopen("C:\testData.txt","r");

if(!fp) return NULL;

fseek(fp,offsetSave,SEEK_SET);

rp=fgets(strTemp,M,fp);

if(!rp)return NULL;

len=strlen(rp);

offsetSave+=len+1;

fclose(fp);

sLine=(char *)malloc(sizeof(char)*(len+1));

if(!sLine) return NULL;

strcpy(sLine,rp);

return sLine;

}

『肆』 c語言讀取文件中的一條記錄如何從文件中讀取記錄

這里的記錄一般說的是結構體,即保存了一組信息。
將結構體寫入文件可使用fwrite函數,原型:
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);參數含義:
(1)buffer:是一個指針,對fwrite來說,是要獲取數據的地址;
(2)size:要寫入內容的單位元組數;
(3)count:要進行寫入size位元組的數據項的個數;
(4)stream:目標文件指針;
返回值:
實際寫入的數據項個數count。
註:文件需用二進制寫的方式打開,即:
fout = fopen("file address", "wb"); 從文件中讀取結構體信息,可使用fread函數,原型:
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;參數含義:
(1)buffer:用於接收數據的內存地址
(2)size:要讀的每個數據項的位元組數,單位是位元組
(3)count:要讀count個數據項,每個數據項size個位元組.
(4)stream:輸入流
返回值:
實際讀取的元素個數。
註:文件需用二進制讀的方式打開,即:
fin = fopen("file address", "rb"); fwrite和fread都是單純的寫、讀二進制數據,所以需要配合使用,以保證數據有效。用fwrite產生文件,之後配套的用fread來讀取文件。

『伍』 c語言如何讀取文件並輸出

c語言讀取文件並輸出的代碼如下:

#include<stdio.h>

inta;

charb,c[100];

intmain(){

FILE*fp1=fopen("input.txt","r");//打開輸入文件

FILE*fp2=fopen("output.txt","w");//打開輸出文件

if(fp1==NULL||fp2==NULL){//若打開文件失敗則退出

puts("不能打開文件!");

return0;

fscanf(fp1,"%d",&a);//從輸入文件讀取一個整數

b=fgetc(fp1);//從輸入文件讀取一個字元

fgets(c,100,fp1);//從輸入文件讀取一行字元串

printf("%ld",ftell(fp1));//輸出fp1指針當前位置相對於文件首的偏移位元組數

fputs(c,fp2);//向輸出文件寫入一行字元串

fputc(b,fp2);//向輸出文件寫入一個字元

fprintf(fp2,"%d",a);//向輸出文件寫入一個整數

fclose(fp1);//關閉輸入文件

fclose(fp2);//關閉輸出文件,相當於保存

return0;

C語言中使用fopen()函數實現文件的讀取,使用fgetc()函數讀取文件中的字元,使用fclose()實現文件的關閉,注意:打開文件流必須要關閉文件流,不然會持續佔用計算機內存資源。



(5)c語言讀取文件信息擴展閱讀:

fopen函數

C語言中fopen函數可以兩個參數,fopen(const char *filename, const char *mode)。

第一個參數filename:這是 C 字元串,包含了要打開的文件名稱。

第二個參數mode:這是 C 字元串,包含了文件訪問模式。

『陸』 如何用C語言讀寫文件

c語言讀寫文件程序:

#include "stdio.h"

#include <stdlib.h>

main()

{

FILE *fp1;//定義文件流指針,用於打開讀取的文件

FILE *fp2;//定義文件流指針,用於打開寫操作的文件

char text[1024];//定義一個字元串數組,用於存儲讀取的字元

fp1 = fopen("d:\a.txt","r");//只讀方式打開文件a.txt

fp2 = fopen("d:\b.txt","w");//寫方式打開文件a.txt

while(fgets(text,1024,fp1)!=NULL)//逐行讀取fp1所指向文件中的內容到text中

{

puts(text);//輸出到屏幕

fputs(text,fp2);//將內容寫到fp2所指向文件中

}

fclose(fp1);//關閉文件a.txt,有打開就要有關閉

fclose(fp2);//關閉文件b.txt

}

(6)c語言讀取文件信息擴展閱讀:

C語言文件讀寫操作總結

一.非標准文件的讀寫 不帶緩沖的

1.文件的打開和關閉

open()函數的作用是打開文件,其調用格式為: int open(char *filename, int access); 該函數表示按access的要求打開名為filename的文件,返回值為文件描述字,其中access有兩部分內容: 基本模式和修飾符, 兩者用" "("或")方式連接,修飾符可以有多個, 但基本模式只能有一個。

access的規定

O_RDONLY 只讀

O_APPEND 文件指針指向末尾

O_WRONLY 只寫

O_CREAT 文件不存在時創建文件, 屬性按基本模式屬性

O_RDWR 讀寫

O_BINARY 打開一個二進制文件

O_TEXT 打開一個文字文件

open()函數打開成功, 返回值就是文件描述字的值(非負值), 否則返回-1。 close()函數的作用是關閉由open()函數打開的文件, 其調用格式為: int close(int handle); 該函數關閉文件描述字handle相連的文件。

2.讀寫函數

int read(int handle, void *buf, int count);

read()函數從handle(文件描述字)相連的文件中, 讀取count個位元組放到buf所指的緩沖區中, 返回值為實際所讀位元組數, 返回-1表示出錯。返回0 表示文件結束。

write()函數的調用格式為: int write(int handle, void *buf, int count); write()函數把count個位元組從buf指向的緩沖區寫入與handle相連的文件中, 返回值為實際寫入的位元組數。

3.隨機定位函數

lseek()函數的調用格式為: int lseek(int handle, long offset, int fromwhere);

該函數對與handle相連的文件位置指針進行定位,功能和用法與fseek()函數相同。 tell()函數的調用格式為: long tell(int handle); 該函數返回與handle相連的文件現生位置指針, 功能和用法與ftell()相同

二、標准文件的讀寫

1.文件的打開函數fopen()

文件的打開操作表示將給用戶指定的文件在內存分配一個FILE結構區,並將該結構的指針返回給用戶程序,以後用戶程序就可用此FILE指針來實現對指定文件的存取操作了。

當使用打開函數時,必須給出文件名、文件操作方式(讀、寫或讀寫),如果該文件名不存在,就意味著建立(只對寫文件而言,對讀文件則出錯),並將文件指針指向文件開頭。若已有一個同名文件存在,則刪除該文件,若無同名文件,則建立該文件,並將文件指針指向文件開頭。

fopen(char *filename,char *type);

其中*filename是要打開文件的文件名指針,一般用雙引號括起來的文件名表示,也可使用雙反斜杠隔開的路徑名。

而*type參數表示了對打開文件的操作方式。其可採用的操作方式如下:

"r" 打開,只讀; "w" 打開,文件指針指到頭,只寫; "a" 打開,指向文件尾,在已存在文件中追加; "rb" 打開一個二進制文件,只讀; "wb" 打開一個二進制文件,只寫; "ab" 打開一個二進制文件,進行追加 ;

"r+" 以讀/寫方式打開一個已存在的文件; "w+" 以讀/寫方式建立一個新的文本文件 ;"a+" 以讀/寫方式打開一個文件文件進行追加 ;"rb+" 以讀/寫方式打開一個二進制文件; "wb+" 以讀/寫方式建立一個新的二進制文件 ;

"ab+" 以讀/寫方式打開一個二進制文件進行追加 ;當用fopen()成功的打開一個文件時,該函數將返回一個FILE指針,如果文件打開失敗,將返回一個NULL指針。

『柒』 C語言如何讀取txt文本裡面的內容

C語言可以使用fopen()函數讀取txt文本里。

示例:

#include <stdio.h>

FILE *stream, *stream2;

void main( void )

{

int numclosed;

/* Open for read (will fail if file "data" does not exist) */

if( (stream = fopen( "data", "r" )) == NULL )

printf( "The file 'data' was not opened " );

else

printf( "The file 'data' was opened " );

/* Open for write */

if( (stream2 = fopen( "data2", "w+" )) == NULL )

printf( "The file 'data2' was not opened " );

else

printf( "The file 'data2' was opened " );

/* Close stream */

if(fclose( stream2 ))

printf( "The file 'data2' was not closed " );

/* All other files are closed: */

numclosed = _fcloseall( );

printf( "Number of files closed by _fcloseall: %u ", numclosed );

}

(7)c語言讀取文件信息擴展閱讀

使用fgetc函數

#include <stdio.h>

#include <stdlib.h>

void main( void )

{

FILE *stream;

char buffer[81];

int i, ch;

/* Open file to read line from: */

if( (stream = fopen( "fgetc.c", "r" )) == NULL )

exit( 0 );

/* Read in first 80 characters and place them in "buffer": */

ch = fgetc( stream );

for( i=0; (i < 80 ) && ( feof( stream ) == 0 ); i++ )

{

buffer[i] = (char)ch;

ch = fgetc( stream );

}

/* Add null to end string */

buffer[i] = '';

printf( "%s ", buffer );

fclose( stream );

}

『捌』 怎麼用C語言讀取文件

#include
"stdio.h"
int
main()
{
FILE
*pf=NULL; //文件指針
int
filelen=0;
int
i=0;
char
*buf;
pf=fopen("D:\\test.txt","r"); //以只讀方式打開文件
if(pf==NULL)
{
return
0;
}
else
{
//獲得文件長度
fseek(pf,0,SEEK_END); //文件指針移到末尾
filelen=ftell(pf); //獲得文件當前指針位置,即為文件長度
rewind(pf); //將文件指針移到開頭,准備讀取
buf=malloc(filelen+1); //新建緩沖區,存儲獨處的數據
//將緩沖區的數據設置為0
for(i=0;i<filelen+1;i++)
buf[i]=0;

//讀取文件
fread(buf,filelen,1,pf);
//關閉文件
fclose(pf);
//buf中即為要讀出的數據
printf("%s\n",buf);
//輸出一下數據,你可以隨便怎麼用
free(buf);
//最後記得要釋放
}
return
1;
}

『玖』 如何用c語言從txt文件中讀取數據

//其中的in.txt就是你要讀取數據的文件,當然把它和程序放在同一目錄
-------------------------------------
#include
<stdio.h>
int
main()
{
int
data;
file
*fp=fopen("in.txt","r");
if(!fp)
{
printf("can't
open
file\n");
return
-1;
}
while(!feof(fp))
{
fscanf(fp,"%d",&data);
printf("%4d",data);
}
printf("\n");
fclose(fp);
return
0;
}