一般形式 编辑 函数名: 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 : 读入一个字符串,遇空字符‘ '结束。 %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:%dn" , 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 openedn" ); 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 ( "%sn" ,s); printf ( "%ldn" ,l); printf ( "%fn" ,fp); printf ( "%cn" ,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函数的返回值判断数据是否正确读入。