fscanf函数从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
原型:int fscanf(FILE *stream, char *format,[argument...]);
返回值:返回实际被转换并赋值的输入项的数目。
%d:读入一个十进制整数。
%i :读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25。
scanf(...)函数与fscanf(stdin,...)相同。
sscanf(s,...)函数与scanf(...)等价,所不同的是,前者的输入字符来源于字符串s.
------------------------------------------
下面是百科中的两个DEMO
------------------------------------------
/************************************************************************/
/* fscanf函数DEMO
*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define FIRST_DEMO
//#define SECOND_DEMO
#ifdef FIRST_DEMO
int main(void)
{
int i;
printf("Input an integer:");
/*read an integer from the standard input stream*/
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);
}
system("pause");
return 0;
}
#elif defined SECOND_DEMO
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'); //%c前没有空格
/*set pointer to beginning of file*/
fseek(stream,0L,SEEK_SET);
/*Read data back from file*/
fscanf(stream,"%s",s);
fscanf(stream,"%ld",&l);
fscanf(stream,"%f",&fp);
fscanf(stream,"%c",&c);
/*output data read*/
printf("%s\n",s);
printf("%ld\n",l);
printf("%f\n",fp);
printf("c=%c\n",c);
fclose(stream);
}
system("pause");
return 0;
}
#endif