scanf(),fscanf的详解

我们这里只讨论fscanf(或者scanf)的格式,因为这些细节在其他贴里并没有涉及,阅读此文,你可以少走一些弯路。只讲结果,深层原因并不分析。

FILE *pFile;float x1; char name[20];

pFile = fopen(‘"example.txt","r");

1.参数格式:

如fscanf(pFile,"%s%f", name, &x1)可以正确读到数值,那么当把此句中的%f替换为%lf则会出错。反之把x1的变量声明float换成double也会出错。就是说fscanf并不能完成对float和double之间的转换,若fscanf调用格式不匹配则会出意想不到的结果。

2.参数个数:

申明float x2;然后调用fscanf(pFile,"%s%f", name, &x1,&x2)这个语句可以完全正确执行,只是x2并没有赋值而已。但是当fscanf语句改为fscanf(pFile,"%s%f%f", name, &x1)则会出错。

3.Fomat的有效输入:“%s\r\f%f   h”像这种输入,编译器会自动解析只留下有意义的部分,即:“%s%f”。

欢迎大家来指正,或帮我解释深层机制,互相学习。

时间: 2024-08-03 14:45:23

scanf(),fscanf的详解的相关文章

scanf与printf详解(转)

一.scanf家族 1.scanf家族的原型 int scanf(char const *format,...); int fscanf(FILE *stream,char const *format,...); int sscanf(char const *buffer,char const *format,...); 每个原型中的省略号表示一个可变长度的指针列表.从输入转换而来的值逐个存储到这些指针指向的内存位置.由于C的参数传递都是传值调用决定了可变参数都是指针列表.注意:若给的不是指针,

Linux C 字符串输入函数 gets()、fgets()、scanf() 详解

一.gets() 函数详解 gets()函数用来从标准输入设备(键盘)读取字符串直到 回车结束,但回车符不属于这个字符串. 调用格式为: gets(str); 其中str为字符串变量(字符串数组名或字符串指针). gets(str) 函数与 scanf("%s", &str) 相似,但不完全相同,使用 scanf("%s", &str) 函数输入字符串时存在一个问题,就是如果输入了 空格 会认为输入字符串结束. 空格后的字符将作为下一个输入项处理,

fscanf()函数详解&&fprintf()

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束.这与fgets有区别,fgets遇到空格不结束. 用 法: int fscanf(FILE *stream, char *format,[argument...]); int fscanf(文件指针,格式字符串,输入列表); 常用基本参数对照: %d:读入一个十进制整数. %i :读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置来区分进制,如加入"0x"则是十六进制,加入&qu

【C语言天天练(二十)】scanf函数详解

引言:scanf函数虽然是学习C语言时比较早就接触的一个函数,但在使用过程中,发现真正掌握它却并不容易.本文就通过各种例子来详细的总结一下该函数的各种用法,假设它的调用格式为 scanf("<格式化字符串>",<地址表>). 1.一般使用scanf函数时都是为某个变量赋值,不考虑它的返回值.但是任何函数都是需要返回的(即使返回类型用void,也可以认为只是调用了return语句,只是并没有返回什么东西而已),同样的scanf函数也是有返回的,它的返回值是成功读取

Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

?? 上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存

缓冲区溢出详解

1 缓冲区溢出原理 缓冲区是一块连续的计算机内存区域,可保存相同数据类型的多个实例.缓冲区可以是堆栈(自动变量).堆(动态内存)和静态数据区(全局或静态).在C/C++语言中,通常使用字符数组和malloc/new之类内存分配函数实现缓冲区.溢出指数据被添加到分配给该缓冲区的内存块之外.缓冲区溢出是最常见的程序缺陷. 栈帧结构的引入为高级语言中实现函数或过程调用提供直接的硬件支持,但由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来隐患.若将函数返回地址修改为指向一段

HDU 5122 K.Bro Sorting(模拟——思维题详解)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5122 Problem Description Matt's friend K.Bro is an ACMer. Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will compare each pair of adjacent items and swap them if they are in the wrong o

邻接表无向图(一)之 C语言详解

本章介绍邻接表无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现.实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若文章有错误或不足的地方,请不吝指出! 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结构与算法

HDU 1024 Max Sum Plus Plus【动态规划求最大M子段和详解 】

Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 29942    Accepted Submission(s): 10516 Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem