fscanf从文件读字符串 读取字符串
很多朋友对于fscanf从文件读字符串和读取字符串不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
C语言文件读取fscanf(),该怎么处理
fscanf位于头文件<stdio.h>中,函数原型为int fscanf(FILE*stream, constchar*format, [argument...]);其功能为根据数据格式(format)从输入流(stream)中写入数据(argument);与fgets的差别在于:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束。
函数名: fscanf
功能:从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
用法:
1 int fscanf(FILE*stream,constchar*format,[argument...]);
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。
程序例
例一
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
int i;
printf("Input an integer:");
/*从标准输入中读取一个整数*/
if(fscanf(stdin,"%d",&i))
printf("The integer read was:%d\n", i);
else
{
fprintf(stderr,"Error reading an integer from stdin.\n");
exit(1);
}
return 0;
}
返回EOF如果读取到文件结尾。
例二
附:MSDN中例子
#include<stdio.h>
FILE*stream;
int main(void)
{
long l;
float fp;
char s[81];
char c;
stream= fopen("fscanf.out","w+");
if(stream==NULL)
printf("The file fscanf.out was not opened\n");
else
{
fprintf(stream,"%s%ld%f%c","a-string", 65000,3.14159,'x');
/*将指针设置至文件开头*/
fseek(stream,0L,SEEK_SET);
/*从文件中读取数据*/
fscanf(stream,"%s",s);
fscanf(stream,"%ld",&l);
fscanf(stream,"%f",&fp);
fscanf(stream,"%c",&c);
/*输出读取的数据*/
printf("%s\n",s);
printf("%ld\n",l);
printf("%f\n",fp);
printf("%c\n",c);
fclose(stream);
}
return 0;
}//这样会有意外输出
关于C语言读取文件及fscanf函数的问题
函数名: fscanf
功能:从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
用法:
1 int fscanf(FILE*stream,constchar*format,[argument...]);
FILE*stream:文件指针;
char*format:格式字符串;
[argument...]:输入列表。
例如:
FILE* fp;
char a[10];
int b;
double c;
fscanf(fp,"%s%d%lf", a,&b,&c);
和scanf一样,格式化串的空格不代表读取的子串有空格,存放读取数据的参数都是指针。
扩展阅读,C语言中文件的读取和写:
FILE*pFile=fopen("1.txt","r");//获取文件的指针
char*pBuf;//定义文件指针
fseek(pFile,0,SEEK_END);//把指针移动到文件的结尾,获取文件长度
int len=ftell(pFile);//获取文件长度
pBuf=new char[len+1];//定义数组长度
rewind(pFile);//把指针移动到文件开头因为我们一开始把指针移动到结尾,如果不移动回来会出错
fread(pBuf,1,len,pFile);//读文件
pBuf[len]=0;//把读到的文件最后一位写为0要不然系统会一直寻找到0后才结束
MessageBox(pBuf);//显示读到的数据
fclose(pFile);//关闭文件
C语言提取文件内容保存到字符串数组问题
你的程序的问题:
1.文件如果不是要读同时又要写的情况,用'r'属性打开就可以了;
你的程序最后没有关闭文件。
2.while((fgets(&str[i],100,fp)!= NULL))应该写成while((fgets(str,100,fp)!= NULL))
原因:fgets是读取文件中的一整行数据放到第一个参数位置,
你第一行装入str+0位置,第二行放到str+1??这个没有道理呀,何况你下面还
用str[0]来打印输出。
3.我读你程序,似乎是要将文件中的所有单词全部读出,而且文件中每个单词占用一行,
象程序中的定义,你所有单词的字符串的字符个数不能超过1024个。
如果要将小于1024个单词读出来,需要统计一下最长单词的字符个数,比如我们假定是9,
那么我们程序中就可以定义数组了(每行单词字符加换行符加字符串结尾符有时还有回车符):
char world[1024][12],str[1024][12];
每次用fgets(str[i],10,fp)读进来,i可以从0开始,每单词加1,程序可以象下面设计:
#include"stdio.h"
#include"string.h"
#define PATH"/Users/SQZS/Desktop/word.txt"
main()
{
FILE*fp;
char world[1024][12],str[1024][12];
int i,nNumber;
i=nNumber=0;
if( fp=fopen(PATH,"r"))
{
fgets(str[i],12,fp);
while(!feof(fp))
{
nNumber++; i++;
fgets(str[i],12,fp);
}
fclose(fp);
for( i=0;i<nNumber;i++) printf("%s",str[i]);
}
else printf("不能打开文本文件'%s'.\n",PATH);
}
好了,文章到此结束,希望可以帮助到大家。