fscanf怎么用,C语言fscanf的用法是什么
fscanf怎么用,C语言fscanf的用法是什么详细介绍
本文目录一览: fscanf函数的用法
fscanf函数的用法为“intfscanf(FILE*stream,char*format,[argument...]);”,所有符号需在英文模式下输出。
fscanf()函数(有点像正则表达式),功能是从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。
scanf()是C语言中的一个输出函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include
。
scanf()函数的指定输入格式有很多种,下面是一些比较常用的格式:
%d:读入可选有符号的十进制整数。
%u:读入无符号符号十进制整数。
%a,e,f,g,A,E,F,G: 读入可选有符号浮点数,输入格式应该像strtod函数识别的字符序列一样。
%o:读入可选有符号八进制整数。
%s:读入一个的字符序列,后面会加上空字节,遇到空白字符(\t \r \n 空格等)完成读取。
使用格式:
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include
。
(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include
。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
C语言fscanf的用法是什么
用 法: int fscanf(FILE *stream, char *format,[argument...])。
1、fscanf()的format参数允许的格式为:“%[*][width][modifiers]type”。[]中的内容根据需要供选,可缺省,%type必须要有,不可省。
2、“format”是C字符串,由“空格”、“非空格”及“转换符”组成。具体格式为%[*][width][modifiers]type,与“format”中“转换符”对应变量地址的列表,两地址间用逗号隔开。
fscanf()对空格的处理示例代码如下:
re = fscanf(pF, "%d%d%d", &oLine.p, &oLine.l, &oLine.x); if( 3 == re){ //Print on stdout printf("%d\t%d\t%d\n", oLine.p, oLine.l, oLine.x); }
C语言中fscanf()的用法
首先,你要确认你的这个文件名是正确的,这个文件名没有隐藏的后缀名,其次,你这个文件放的位置要正确,要放在你的工程的路径下,如果你不知道要将这个文件放在哪里,请把你的代码中fp = fopen("121.text", "r")的"121.text"这个改成绝对路径 :比如说:"F:\CWorkspace\hello\121.text",这个路径要看你具体存放在哪里了
另外,你的程序有些问题,我给你改好了,如果你的文件没问题的话用这个就可以运行了
#include
int main()
{
struct student
{
char num[10];
char name[10];
float score[3];
float avg;
} t[100];
FILE *fp;
int i, n = 2;
/***************************************************************************/
if ((fp = fopen("121.text", "r")) == NULL)
{
printf("没有此文件\n");
perror("fopen");
exit(0);
}
for (i = 0; i < n; i++)
fscanf(fp, "%s%s%f%f%f%f", t[i].num, t[i].name, &t[i].score[0], &t[i].score[1],
&t[i].score[2], &t[i].avg);
fclose(fp);
/*****************************************************************************/
for (i = 0; i < n; i++)
printf("%s\t%s\t%-5.2f\t%-5.2f\t%-5.2f\t%-5.2f\t\n", t[i].num,
t[i].name, t[i].score[0], t[i].score[1], t[i].score[2],
t[i].avg);
return 0;
}
功 能: 从一个流中执行格式化输入\x0d\x0a 用 法: int fscanf(FILE *stream, char *format,[argument...]);\x0d\x0a int fscanf(文件指针,格式字符串,输入列表);\x0d\x0a 返回值:整型,数值等于[argument...]的个数\x0d\x0a 程序例:\x0d\x0a #include \x0d\x0a #include \x0d\x0a int main(void)\x0d\x0a {\x0d\x0a int i;\x0d\x0a printf("Input an integer: ");\x0d\x0a if (fscanf(stdin, "%d", &i))\x0d\x0a printf("The integer read was: %d\n",\x0d\x0a i);\x0d\x0a else\x0d\x0a {\x0d\x0a fprintf(stderr, "Error reading an \\x0d\x0a integer from stdin.\n");\x0d\x0a exit(1);\x0d\x0a }\x0d\x0a return 0;\x0d\x0a }\x0d\x0a 返回EOF如果读取到文件结尾。
Matlab中fscanf的用法是什么?
Matlab中fscanf的用法:
1、用fscanf是可以一个一个读入数据,也可以一下读入一个二维数组。
非常方便。我找了个中文的帮助资料,但是是繁体的,不过大家凑活看吧。如果遇到注释行,用下面的语句fscanf(fid,’%6s’,1); ,其中的6代表读入的字码长度。本来想多写点,但是好累,休息会,编程不是人干的活。
正式之读取资料函数如下之格式: A=fscanf(fid,format)
[A, count]=fscanf(fid,format,size) [A, count]=fscanf(fid,format,size)
2、这个指令可以自fid所标示的档案中将其资料依format的格式取出,并置於矩阵A中。这个指令可以自fid所标示的档案中将其资料依format的格式取出,并置于矩阵A中。 fid的定义与前述之fprintf指令相同。 fid的定义与前述之fprintf指令相同。 另一种型式则增加count与size两参数。另一种型式则增加count与size两参数。 count表示已完成的资料笔数。
3、 count表示已完成的资料笔数。 而size则是决定读入之资料量,可用[m,n]表示,表示读入之资料可填满mxn的矩阵。而size则是决定读入之资料量,可用[m,n]表示,表示读入之资料可填满mxn的矩阵。 其中n 可用inf取代,代表EOF(End of File)。其中n可用inf取代,代表EOF(End of File)。
fscanf函数的用法
void Status_info_create(struct status_info *status_head,FILE *file)
{
while(!feof(file))
{
status_head->next=(struct status_info *)malloc(SIZE);
status_head=status_head->next;
fscanf(file,"%s%s%s%d%s",&status_head->id,status_head->name,&status_head->tel_num,&status_head->score,&status_head->password);
}
status_head->next=NULL;
}
这一行:
fscanf(file,"%s%s%s%d%s",&status_head->id,status_head->name,&status_head->tel_num,&status_head->score,&status_head->password);
改成
fscanf(file,"%s%s%s%d%s",status_head->id,status_head->name,status_head->tel_num,&status_head->score,status_head->password);
往char型数组里面读数据只需要提供数组名就行了。不需要&。试试看
Matlab中fscanf的用法
matlab中的fscanf的用法如下:
A=fscanf(fid,format)
[A,
count]=fscanf(fid,format,size)
[A,
count]=fscanf(fid,format,size)
个人感觉用的最多的是
这样的形式:
data
=
fscanf(fid,format,size);
其中data为读取内容的数组,大小由size决定。size是一个[m
n]的向量,
m为行,n为列(注意,这里读取的顺序是按列优先排列的,不明白的话可以看
下面的例子),若n取inf表示读到文件末尾。fid为fopen打开文件的返回值,
format是格式化参数(像printf、scanf)。
举个小例子:
路径+文件名:d:\moon.txt
内容:13,1,3.4
3,2.1,23
1,12,2
4,5.4,6
现在为了读取moon中的数据存在一个数组里,可以用如下方法
fid=fopen('d:\moon.txt');
data_1
=fscanf(fid,'%f,%f,%f',[3,inf])
;%这里得用单引号
data_2
=fscanf(fid,'%f,%f,%f',[2,inf])
data_3
=fscanf(fid,'%f,%f,%f',[2,2])
fclose(fid);
这时data_1,
data_2,
data_3分别是一个数组,其内容分别如下:
data_1
13
3
1
4
1
2.1
12
5.4
4
23
2
6
data_2
13
3.4
2.1
1
2
4
1
3
23
12
4,5
6
data_3
13
3.4
1
3
由此可见,读数据的时候,从多维数组的水平方向,一个一个读取,传递给新的数组时,从列方向优先。
c语言,怎么用fscanf()把数据读到动态数组中?
a[] = "
要经过如下几个步骤:
1 打开文件。
2 创建动态数组。如果事先可以预知数据总数,或者可以通过打开的文件获取到需要读取的数量,那么这一步可以使用已知或读取到的值来创建动态数组。否则可以先暂定一个大小,在实际读取中如出现不足再用realloc函数重新分配。
3 格式化读取数据。用scanf读取数据。直到读取到所有需要的数据,或者出错为止。
4 关闭文件。
5 使用读取到的文件。
下面以不确定总数的方式为例,提供一个参考代码。
假定文件名为in.txt, 所存数据均为合法int型,以空格或换行分隔。
#include
#include
int main(){ FILE *fp = NULL; int n=0;//标识已经读到的数据数量 int len = 100; //标识分配的动态数组大小.初始设定为100 int *a = NULL; //动态数组名 int i; fp = fopen("r", "in.txt"); //以读的方式打开文件 if(fp == NULL) return -1; //打开文件出错,返回。 a = (int *)malloc(sizeof(int) * len); if(a == NULL) return -2; //分配内存出错,返回。 while(1) { if(scanf("%d",a+n) == EOF)break;//读取到文件结尾结束输入。 n++; if(n >= len)//数组空间不足。 { len+=100;//增加100个元素空间。 a = realloc(sizeof(int) * len);//重新分配内存。 if(a==NULL)return -2; // 分配内存出错。 } } printf("共读取到%d个元素\n", n); for(i = 0; i < n; i ++) printf("%d\n", a[i]);//打印所有读到的元素。 free(a);//程序结束,释放内存。 return 0;}
C语言如何用fscanf按行读取一段固定格式
你可以用fgets()按行读取内容到 字符串变量里,然后处理。
假如已读入到 str[80] 里:
char str[80]="OR2_X2 C401 ( .A1(n66), .A2(n85), .ZN(N142) )";
多行这样的文字格式,
如果位置固定,可以直接读出:
char r[4][5];
sscanf(str,"%s",r[0]); r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+18,"%s",r[1]); r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+28,"%s",r[2]); r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+38,"%s",r[3]); r[3][4]='\0';printf("%s\n",r[3]);
------------------------
如果位置不固定,我们可以用查找 点号的位置加4:
int i,j,L[3];
j=0;
for (i=0;i
<strlen(str);i++){
if (str[i]=='.'){L[j]=i+4; j++;}
}
sscanf(str,"%s",r[0]); r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+L[0],"%s",r[1]); r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+L[1],"%s",r[2]); r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+L[2],"%s",r[3]); r[3][4]='\0';printf("%s\n",r[3]);
在fscanf的第二个参数,格式字符串中,指定对应的格式即可。
fscanf与scanf类似,可以格式化输入一组数据,不过不是从终端,而是从对应文件中。
其声明为:
int fscanf(FILE *fp, const char *fmt, ...);
功能为从打开的文件fp中,根据fmt格式字符,读取数据到后续参数中,并返回实际读取的个数。
比如,文件中存着以逗号分隔的三个整型数值,那么将其读取的操作即
fscanf(fp,"%d:%d:%d",&a,&b,&c);
其中,fp为打开的文件指针,abc分别是三个整型变量。
</strlen(str);i++){
fscanf的用法
fscanf
简述:C语言中基本的文件操作
函数名:fscanf
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
用法:
FILE *stream:文件指针
char *format:格式字符串
[argument...]:输入列表
格式字符说明
常用基本参数对照:
%d:读入一个十进制整数.
%i :读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入"0x"则是十六进制,加入"0"则为八进制。例如串"031"使用%d时会被算作31,但是使用%i时会算作25.
%u:读入一个无符号十进制整数.
%f %F %g %G : 用来输入实数,可以用小数形式或指数形式输入.
%x %X: 读入十六进制整数.
%o': 读入八进制整数.
%s : 读入一个字符串,遇空字符'\0'结束。
%c : 读入一个字符。无法读入空值。空格可以被读入。
附加格式说明字符表修饰符说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
示例说明
如果要求从标准输入中输入一串字符串和一个整型数,那么参数"%s%d"表示什么呢?默认情况下,在终端上(这里假设程序为控制台应用程序)输入第一个参数的值的时候敲下回车,则在第二行输入的为第二个参数值,采用这种输入方法那么格式字符的形式就无关紧要了。[1]
这里要特殊说明的是如果参数在同一行给出,那么格式字符的参数与终端的输入会有什么关系。举个例子:如果格式字符为"%s+%d",那么参数的输入就应该为 string + integer。
fprintf、fscanf的读写对象不是终端而是磁盘文件;
调用方式为:int fprintf(文件指针,格式字符串,输出表列 )返回值:返回实际输出的字符数,
操作不成功返回EOF
int fscanf(文件指针,格式字符串,输入表列 )返回值:返回输入的数据个数,操作不成功返回EOF
fprintf(fp, "%d, %6.2f", i, t) 将整型变量 i 和实型变量 t 的值按%d和%6.2f的格式输出到fp所指向的文件中; 若i=3,t=4.5,则输出到磁盘中的格式为:3, 4.50相应的,从文件中读取数据时,则应用:fscanf(fp, "%d, %f", &i, &t)
在运用fprintf与fscanf时,在向文件输出数据及从文件读取数据时,分隔符应该相一致。如下程序所示,该程序的功能是:用户输入8个整型数据,程序回显并把数据写到int.txt文件中,然后程序再从int.txt文件中读取数据,并显示出来。