C语言中fscanf函数

一般形式

编辑
函数名: 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”表示什么呢?默认情况下,在终端上(这里假设程序为控制台应用程序)输入第一个参数的值的时候敲下回车,则在第二行输入的为第二个参数值,采用这种输入方法那么格式字符的形式就无关紧要了。
这里要特殊说明的是如果参数在同一行给出,那么格式字符的参数与终端的输入会有什么关系。举个例子:如果格式字符为“%s+%d”,那么参数的输入就应该为 string + integer。

程序例

编辑

例一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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中例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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;
} //这样会有意外输出

关于scanf函数返回值的理解及用法
1.scanf()函数有返回值且为int型。scanf返回值表示成功读入的数据个数。 
2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。 
例如,scanf("%d%d", &a, &b); 如下为返回值的四种情况
     (1) 如果a和b都被成功读入,那么scanf的返回值就是2
     (2) 如果只有a被成功读入,返回值为1
     (3)如果a和b都未被成功读入,返回值为0(即scanf函数遇到非法输入时,返回值为0)
     (4)如果遇到错误或遇到文件结束符(end of file,EOF,控制台下用Ctrl+Z输入)则返回EOF(stdio.h中定义符号常量:#define EOF -1)。
 由此例可见因此可利用scanf函数的返回值判断数据是否正确读入。
  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值