c语言如何从txt文件读取数据,怎样用C语言从txt文件中读入数据?
c语言如何从txt文件读取数据,怎样用C语言从txt文件中读入数据?详细介绍
本文目录一览: 从文本文件里读取数字,c语言如何实现
voidmain()
{
FILE*fin;
inta,b,c,d;
chars[20];
floatf1,f2,f3,f4;
fin=fopen("abc.txt","r");//打开
fscanf(fin,"%1d%1d%1d%1d",&a,&b,&c,&d);//按1位整型读前4个数
printf("a=%db=%dc=%dd=%d\n",a,b,c,d);
rewind(fin);//文件回绕到开始处
fscanf(fin,"%s",s);//按字符串读一串
printf("s=%s\n",s);
rewind(fin);//文件回绕到开始处
fscanf(fin,"%1f%1f%1f%1f",&f1,&f2,&f3,&f4);//按1位float型读前4个数
printf("%f%f%f%f\n",f1,f2,f3,f4);
flcose(fin);
}
abc.txt内容:
123456789
读到数组:
inty[20];
inti;
fin=fopen("abc.txt","r");
for(i=0;i<9;i++)fscanf(fin,"%1d",&y[i]);
扩展资料
C语言中文件的读取
fopen(打开文件)
相关函数open,fclose
表头文件#include
定义函数FILE*fopen(constchar*path,constchar*mode);
函数说明参数路径包含包含打开的文件路径和文件名,参数模式字符串则代表着流形态。
模式有以下几种形态类别:
r:预期文件,该文件必须存在。
r+:可读写的文件,该文件必须存在。
w:只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+:可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a以附加的方式打开只写文件。若文件不存在,则建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
c语言读取txt文件内容
用C语言从txt文件中读取数据,可以使用C标准库文件自带的文件接口函数进行操作。
一、打开文件:
FILE *fopen(const char *filename, const char *mode);
因为txt文件为文本文件, 所以打开时选择的mode应为"r"或者"rt"。
二、读取文件:
读取文件应根据文件内容的格式,以及程序要求,选择读取文件的函数。可以使用一种,也可以几种混用。 常用的文件读取函数如下:
1、fgetc, 从文件中读取一个字节并返回。 适用于逐个字节读取。
2、 fgets, 从文件中读取一行。适用于整行读取。
3、fscanf, 格式化读取文件, 在已经清楚文件存储格式下,可以直接用fscanf把文件数据读取到对应类型的变量中。
4、fread, 整块读取文件, 对于txt文件比较少用。
三、关闭文件:
读取结束后,应调用fclose函数关闭文件。
C语言如何读取txt文本里面的内容?
在C语言中,文件操作都是由库函数来完成的。
要读取一个txt文件,首先要使用文件打开函数fopen()。
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
其次,使用文件读写函数读取文件。
在C语言中提供了多种文件读写的函数: ·字符读写函数 :fgetc和fputc·字符串读写函数:fgets和fputs·数据块读写函数:freed和fwrite·格式化读写函数:fscanf和fprinf
最后,在文件读取结束要使用文件关闭函数fclose()关闭文件。
下面以格式化读写函数fscanf和fprintf为例,实现对文件A.txt(各项信息以空格分割)的读取,并将它的信息以新的格式(用制表符分割各项信息)写入B.txt,实现对A.txt的处理。
C语言源程序如下所示:
#include
#include
#include
typedef struct student{ char name[32]; int no; char sex[16]; float score;} stu;int main(int argc, char* argv[]){ //打开文件 FILE * r=fopen("A.txt","r"); assert(r!=NULL); FILE * w=fopen("B.txt","w"); assert(w!=NULL); //读写文件 stu a[128]; int i=0; while(fscanf(r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)!=EOF) { printf("%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到显示器屏幕 fprintf(w,"%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到文件B.txt i++; } //关闭文件 fclose(r); fclose(w); system("pause"); return 0;}编译运行后的结果如下:
1、打开电脑上要读取的文本文件。
2、打开文本后,点击文本左上角的【文件】按钮。
3、点击【另存为】。这样就会保存本来的这个文本文件,生成一个新的c文件。
4、点击【保存类型-对应的下拉按钮】。
5、选择【C source file(*.c)】。这个就是我们需要转换成C格式的后缀。
6、选择后,点击【保存】。保存后我们即可正常读取该文件了。
如果不加路径,比如一个main.c文件的代码是这样的:
if((fp=fopen("源程序.txt","r"))==NULL)
printf("源程序无法打开!\n");
如果你是在调试时候运行的, 那么"源程序.txt"就是在main.c同一个文件夹下.如果是直接运行程序,则"源程序.txt"是在main.exe同一个文件夹下.
注意,如果指定文件的绝对路径,比如 d:\源程序.txt ,在代码中应该写成这样: d:\\源程序.txt
还有疑问请追问..
亲 你得首先定义一个文件File 然后再判断是否open
C语言可以使用fopen()函数读取txt文本里。
示例:
#include
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\n" );
else
printf( "The file 'data' was opened\n" );
/* Open for write */
if( (stream2 = fopen( "data2", "w+" )) == NULL )
printf( "The file 'data2' was not opened\n" );
else
printf( "The file 'data2' was opened\n" );
/* Close stream */
if(fclose( stream2 ))
printf( "The file 'data2' was not closed\n" );
/* All other files are closed: */
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
扩展资料
使用fgetc函数
#include
#include
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] = '\0';
printf( "%s\n", buffer );
fclose( stream );
}
怎样用C语言从txt文件中读入数据?
//其中的in.txt就是你要读取数据的文件,当然把它和程序放在同一目录
-------------------------------------
#include
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;
}
#include
int
main()
{
FILE
*fp=NULL;
int
a[160];
int
i=0;
fp=fopen("data.txt","r");
if
(
!fp
)
{
printf("open
file
error\n");
return
-1;
}
while(
!feof(fp)
)
{
if
(
fscanf(
fp
,
"%d"
,&a[i]
)
!=1
)
break
;
i++;
fgetc(fp)
;//过滤掉分隔符
}
fclose(fp);
//以下倒序输出数据
printf("i=%d\n"
,
i
);
while(
--i
>=
0
)
{
printf("%d,"
,
a[i]
);
if
(
i
%10
==
0
)
printf("\n")
;
}
return
0;
}
你这是ascii格式的文件,最适合用fscanf来读,例如:
fscanf(fp,
"%s
%s
%d
%f",stu[i].stu_num,stu[i].name,&stu[i].age,&stu[i].score);
fread适用于读定长记录,你这样用当然要出错。
唉,我这只是举例说明,看来你对c还要深入了解。凡是你希望将变量作为参数传递给某函数,并希望在该函数内部改变变量的值,你都需要传递变量的地址,即使用&符号。你在自己的fread里面不是也使用了&stu[i]吗?但是由于字符数组自身已经是地址,所以stu[i].stu_num之类的东西就不要再加&了,否则反而出错。
我并没有你的数据文件,仅从你的帖子上看,你在fscanf的格式字符串最后再加一个回车字符,应该能跳过行尾。建议你再试试
fscanf(fp,
"%s
%s
%d
%f\n",stu[i].stu_num,stu[i].name,&stu[i].age,&stu[i].score);
这要看你的代码是什么样的。
贴出我的验证代码你看看有什么不同。
有一点要注意如果你用的是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]=0;
pf=fopen("C:\\record.txt","r");
fread(str,100,100,pf);
fclose(pf);
printf("\n%s",str);
}
看了你的代码,有几处不妥修正如下:
#include
struct student
{
char stu_num[5];
char name[10];
int age;
int score;
}stu[9];
print_rec(struct student *stud); /*你的访问方法行不通,要这样*/
main()
{
i=0;
FILE *fp;
fp=fopen("C:\\stud_r~1.txt","r");/*这里一定不能放在if里面,这个赋值返回是恒为真的。*/
if(fp==NULL)
{printf("Cannot open the file\n");exit(0);}
for(i=0;i<9;i++)
fread(&stu[i],sizeof(struct student),sizeof(struct student),fp);/*第三个参数是读取的字节数所以不能是1*/
print_rec(stu);
fclose(fp);/*事情做完记得收拾工具*/
getch();
}
print_rec(struct student *stud)
{
int j;
for(j=0;j<9;j++)
printf("%7s%10s%4d%6f\n",stud[j].stu_num,stud[j].name,stud[j].age,stud[j].score);
}
"#include
#define
MAX_LINES
2124
int
main()
{
FILE
*in,
*out;
int
lines
=
0;
int
X[MAX_LINES],
Y[MAX_LINES];
int
i;
float
t
=
1.2F;
int
P[]
=
{1,
2,
3,
4,
5};
int
d[]
=
{4,
5,
6};
in
=
fopen("C.txt",
"r");
if(!in)
return
1;
while(fscanf(in,
"%d%d",
X+lines,
Y+lines)
==
2){
//printf("%d
%d\n",
X[lines],
Y[lines]);
lines
++;
if(lines
>=
MAX_LINES)
break;
}
fclose(in);
out
=
fopen("output.txt",
"w");
if(!out)
return
1;
fprintf(out,
"%f\n",
t);
for(i
=
0;
i
<
sizeof(P)/sizeof(P[0]);
i++)
fprintf(out,
"%d\n",
P[i]);
for(i
=
0;
i
<
sizeof(d)/sizeof(d[0]);
i++)
fprintf(out,
"%d\n",
d[i]);
fclose(out);
return
0;
}"
1 以fopen打开文件,使用"r"方式。
2 通过fscanf,按照文件中的数据格式,读入数据。
3 关闭文件并使用数据。
如文件in.txt中存在三个以空格分隔的数据,依次为整型,字符串,以及浮点型,则读取数据的代码可以写作:
int main(){ FILE *fp; int a; char s[100]; float f; fp = fopen("in.txt", "r"); if(fp == NULL) return -1;//打开文件失败,结束程序。 fscanf(fp,"%d%s%f",&a,s,&f); fclose(fp); printf("read value: %d, %s, %f", a,s,f);}
C语言如何实现对txt文件的读取和写入
写入文件:
//---------------------------------------------------------------------------
#include
int
main(void)
{
char
name[80],pas[80];
FILE
*fp=fopen("user.txt","w");/*以写模式("w")打开文件user.txt,如果不存在,会自动创建*/
gets(name);
gets(pas);
/*输入名称和密码*/
fputs(name,fp);
fputs(pas,fp);/*将名称和密码以字符串形式写入文件*/
fclose(fp);/*关闭文件*/
return
0;
}
//---------------------------------------------------------------------------
从文件读取:
//---------------------------------------------------------------------------
#include
int
main(void)
{
char
name[80],pas[80];
FILE
*fp=fopen("user.txt","r");/*以读模式("r")打开文件user.txt*/
fscanf(fp,"%s",name);
fscanf(fp,"%s",pas);/*从文件读取名称和密码字符串*/
printf("%s\n%s",name,pas);
fclose(fp);
/*关闭文件*/
return
0;
}
//---------------------------------------------------------------------------
使用fopen的r方式可以实现读取,用w+方式可以实现写入。
1.fopen的函数原型:FILE
*
fopen(const
char
*
path,const
char
*
mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r
以只读方式打开文件,该文件必须存在。
r+
以可读写方式打开文件,该文件必须存在。
rb+
读写打开一个二进制文件,允许读数据。
rw+
读写打开一个文本文件,允许读和写。
w
打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+
打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
(原来的EOF符不保留)
wb
只写打开或新建一个二进制文件;只允许写数据。
wb+
读写打开或建立一个二进制文件,允许读和写。
wt+
读写打开或着建立一个文本文件;允许读写。
at+
读写打开一个文本文件,允许读或在文本末追加数据。
ab+
读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b
字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
2.例程:
#include
#define F_PATH "d:\\myfile\\file.dat"
char c;
int main(){
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"w"); //创建文件
if(NULL==fp) return -1;//要返回错误代码
while(scanf("%c",&c)!=EOF) fprintf(fp,"%c",c); //从控制台中读入并在文本输出
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址
return 0;
}
C语言如何实现对txt文件的读取和写入
参考代码:
#include
int main()
{
//下面是写数据,将数字0~9写入到data.txt文件中
FILE *fpWrite=fopen("data.txt","w");
if(fpWrite==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
fprintf(fpWrite,"%d ",i);
fclose(fpWrite);
//下面是读数据,将读到的数据存到数组a[10]中,并且打印到控制台上
int a[10]={0};
FILE *fpRead=fopen("data.txt","r");
if(fpRead==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
{
fscanf(fpRead,"%d ",&a[i]);
printf("%d ",a[i]);
}
getchar();//等待
return 1;
}
其他运算符:
1、逗号运算符
用于把若干表达式组合成一个表达式(,)。
2、指针运算符
用于取内容(*)和取地址(&)二种运算。
3、求字节数运算符
用于计算数据类型所占的字节数(sizeof)。
4、特殊运算符
有括号(),下标[],成员(→,.)等几种。
使用fopen的r方式可以实现读取,用w+方式可以实现写入。1.fopen的函数原型:FILE * fopen(const char * path,const char * mode); fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式: r 以只读方式打开文件,该文件必须存在。 r+ 以可读写方式打开文件,该文件必须存在。 rb+ 读写打开一个二进制文件,允许读数据。 rw+ 读写打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) wb 只写打开或新建一个二进制文件;只允许写数据。 wb+ 读写打开或建立一个二进制文件,允许读和写。 wt+ 读写打开或着建立一个文本文件;允许读写。 at+ 读写打开一个文本文件,允许读或在文本末追加数据。 ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。 返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。2.例程:
#include
#define F_PATH "d:\\myfile\\file.dat"char c;int main(){ FILE*fp=NULL;//需要注意 fp=fopen(F_PATH,"w"); //创建文件 if(NULL==fp) return -1;//要返回错误代码 while(scanf("%c",&c)!=EOF) fprintf(fp,"%c",c); //从控制台中读入并在文本输出 fclose(fp); fp=NULL;//需要指向空,否则会指向原打开文件地址 return 0;}
1、使用VS新建空工程,直接点击确定,如下所示。
2、新建c文件,用于C语言编译器,输入main.c文件,如下所示。
3、参考代码:
#include
int main()
{
//下面是写数据,将数字0~9写入到data.txt文件中
FILE *fpWrite=fopen("data.txt","w");
if(fpWrite==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
fprintf(fpWrite,"%d ",i);
fclose(fpWrite);
//下面是读数据,将读到的数据存到数组a[10]中,并且打印到控制台上
int a[10]={0};
FILE *fpRead=fopen("data.txt","r");
if(fpRead==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
{
fscanf(fpRead,"%d ",&a[i]);
printf("%d ",a[i]);
}
getchar();//等待
return 1;
}
4、编译完成后,运行exe程序,执行后显示console程序。
在c语言中,如何读取一个txt文件中的信息
纯C语言,不是C++?
这样的话,任何一本C语言课本都会讲到文件的操作吧~
FILE* fo;
fo=fopen("文件名","r");
然后建立一个新文件供写入
FILE* fn;
fn=fopen("文件名","w+");
然后用fgetc读,读到的东西存到数组里,每遇到\n就开一个新数组,直到读到EOF
读出来的东西再一个一个fputc回新文件里就行了。
最后
fclose(fo);
fclose(fn);
补充:
fo是FILE型指针,可能指向文件的任何位置,用fseek等操作
fgetc读出来是一个char,肯定要放到一个char型数组对吧,你可以用几万行的2维数组,也可以用几万个1维数组
遇到行结束了,要不就转向二维数组的下一行,要不就新建一个1维数组,这个你会吧:
int* a;
a=(int*)malloc(10000*sizeof(int));
建议用2维数组,简单一点
几万行的文件一点都不大,可以说是比较小的:),放心。
还有,建议你多去看看MSDN之类的或者C教材中对文件操作例程的信息。
一般来说在C语言中读取txt文件的信息有两种方法,一种是使用C语言标准文件I/O中的fopen()、fread()等等函数,一种是调用操作系统中的API函数,比如Windows上的ReadFile()、OpenFile()等等,现在操作系统一般都具备内存文件映射功能,对于大的txt文件,一般都使用这种方式操作。下面是一个使用C语言标准文件I/O操作文件的例子。
#include
FILE*stream;void main(void){ long l; float fp; char s[81]; char c; stream=fopen("fscanf.out","w+"); if(stream==NULL) printf("Thefilefscanf.outwasnotopened\n"); else { fprintf(stream,"%s%ld%f%c","hello world", 65000,3.14159,'x'); /*Setpointertobeginningoffile:*/ fseek(stream,0L,SEEK_SET); /*Readdatabackfromfile:*/ fscanf(stream,"%s",s); fscanf(stream,"%ld",&l); fscanf(stream,"%f",&fp); fscanf(stream,"%c",&c); /*Outputdataread:*/ printf("%s\n",s); printf("%ld\n",l); printf("%f\n",fp); printf("%c\n",c); fclose(stream); }}