fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
格式化输入输出
1. fprintf(格式化输出数据至文件)
相关函数 printf,fscanf,vfprintf
表头文件 #include<stdio.h>
定义函数 int fprintf(FILE * stream, const char * format,.......);
函数说明 fprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束('\0')为止。
返回值 关于参数format字符串的格式请参考printf()。成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中。
范例
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char a_buf[256], b_buf[256];
FILE *fp = NULL;
if(NULL == (fp = fopen("./tmp", "w+"))){
perror("fopen");
return(-1);
}
printf("input a string(<256):\n");
scanf("%s", a_buf);
fprintf(fp, "%s", a_buf);
// rewind(fp);
fseek(fp, 0, SEEK_SET); // 意义和rewind(fp);相同
fscanf(fp, "%s", b_buf);
printf("%s\n", b_buf);
fclose(fp);
return (0);
}
2. fscanf(格式化字符串输入)
相关函数 scanf,sscanf
表头文件 #include<stdio.h>
定义函数 int fscanf(FILE * stream ,const char *format,....);
函数说明 fscanf()会自参数stream的文件流中读取字符串,再根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结构存于对应的参数内。
返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。
附加说明
范例 #include<stdio.h>
3. printf(格式化输出数据)
相关函数 scanf,snprintf
表头文件 #include<stdio.h>
定义函数 int printf(const char * format,.............);
函数说明 printf()会根据参数format字符串来转换并格式化数据,然后将结果写出到标准输出设备,直到出现字符串结束('\0')为止。参数format字符串可包含下列三种字符类型:
? 一般文本,伴随直接输出。
? ASCII控制字符,如\t、\n等。
? 格式转换字符。格式转换为一个百分比符号(%)及其后的格式字符所组成。一般而言,每个%符号在其后都必需有一printf()的参数与之相呼应(只有当%%转换字符出现时会直接输出%字符),而欲输出的数据类型必须与其相对应的转换字符类型相同。
Printf()格式转换的一般形式如下:
%(flags)(width)(.prec)type //以括号括起来的参数为选择性参数,而%与type则是必要的。
底下先介绍type的几种形式。
整数:
%d 整数的参数会被转成一有符号的十进制数字
%u 整数的参数会被转成一无符号的十进制数字
%o 整数的参数会被转成一无符号的八进制数字
%x 整数的参数会被转成一无符号的十六进制数字,并以小写abcdef表示
%X 整数的参数会被转成一无符号的十六进制数字,并以大写ABCDEF表示
浮点型数:
%f double 型的参数会被转成十进制数字,并取到小数点以下六位,四舍五入。
%e double型的参数以指数形式打印,有一个数字会在小数点前,六位数字在小数点后,而在指数部分会以小写的e来表示。
%E 与%e作用相同,唯一区别是指数部分将以大写的E 来表示。
%g double 型的参数会自动选择以%f 或%e 的格式来打印,其标准是根据欲打印的数值及所设置的有效位数来决定。
%G 与%g 作用相同,唯一区别在以指数形态打印时会选择%E格式。
字符及字符串:
%c 整型数的参数会被转成unsigned char型打印出。
%s 指向字符串的参数(指针)会被逐字输出,直到出现NULL字符为止
%p 如果是参数是“void *”型指针则使用十六进制格式显示。
prec 有几种情况
? 正整数的最小位数。
? 在浮点型数中代表小数位数。
? 在%g 格式代表有效位数的最大值。
? 在%s格式代表字符串的最大长度。
? 若为*符号则代表下个参数值为最大长度。
width为参数的最小长度,若此栏并非数值,而是*符号,则表示以下一个参数当做参数长度。
flags 有下列几种情况:
? + 一般在打印负数时,printf()会加印一个负号,整数则不加任何负号。此旗标会使得在打印正数前多一个正号(+)。
? # 此旗标会根据其后转换字符的不同而有不同含义。当在类型为o 之前(如%#o),则会在打印八进制数值前多印一个o。而在类型为x 之前(%#x)则会在打印十六进制数前多印’0x’,在型态为e、E、f、g或G 之前则会强迫数值打印小数点。在类型为g 或G之前时则同时保留小数点及小数位数末尾的零。
? 0 当有指定参数时,无数字的参数将补上0。默认是关闭此旗标,所以一般会打印出空白字符。
返回值 成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中。
范例
#include<stdio.h>
main()
{
int i = 150;
int j = -100;
double k = 3.14159;
printf(“%d %d %f\n”I, j, k);
printf(“%5d %*d\n”, i, 5, i); /* 参数5会代入格式*中,而与%5d同意义 */
}
执行结果:
150 -100 3.141590
150 150
4. sacnf(格式化字符串输入)
相关函数 fscanf,snprintf
表头文件 #include <stdio.h>
定义函数 int scanf(const char * format,.......);
函数说明 scanf()会将输入的数据根据参数format字符串来转换并格式化数据。Scanf()格式转换的一般形式如下:
%[*][size][l][h]type
以中括号括起来的参数为选择性参数,而%与type则是必要的。
选择性参数:
* 代表该对应的参数数据忽略不保存。
size 为允许参数输入的数据长度。
l 输入的数据数值以long int 或double型保存。
h 输入的数据数值以short int 型保存。
type的几种形式:
%d 输入的数据会被转成一有符号的十进制数字(int)。
%i 输入的数据会被转成一有符号的十进制数字,若输入数据以“0x”或“0X”开头代表转换十六进制数字,若以“0”开头则转换八进制数字,其他情况代表十进制。
%0 输入的数据会被转换成一无符号的八进制数字。
%u 输入的数据会被转换成一无符号的正整数。
%x 输入的数据为无符号的十六进制数字,转换后存于unsigned int型变量。
%X 同%x
%f 输入的数据为有符号的浮点型数,转换后存于float型变量。
%e 同%f
%E 同%f
%g 同%f
%s 输入数据为以空格字符为终止的字符串。
%c 输入数据为单一字符。
[] 读取数据但只允许括号内的字符。如[a-z]。
[^] 读取数据但不允许中括号的^符号后的字符出现,如[^0-9].
返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。
范例
#include <stdio.h>
main()
{
int i;
unsigned int j;
char s[5];
scanf(“%d %x %5[a-z] %*s %f”,&i,&j,s,s);
printf(“%d %d %s\n”, i, j, s);
}
执行 10 0x1b aaaaaaaaaa bbbbbbbbbb
10 27 aaaaa
5. sprintf(格式化字符串复制)
相关函数 printf,sprintf
表头文件 #include <stdio.h>
定义函数 int sprintf( char *str, const char * format,.........);
函数说明 sprintf()会根据参数format字符串来转换并格式化数据,然后将结果复制到参数str所指的字符串数组,直到出现字符串结束(’\0’)为止。关于参数format字符串的格式请参考printf()。
返回值 成功则返回参数str字符串长度,失败则返回-1,错误原因存于errno中。
附加说明 使用此函数得留意堆栈溢出,或改用snprintf()。
范例
#include<stdio.h>
main()
{
char * a = ”This is string A!”;
char buf[80];
sprintf(buf, ”>>> %s<<<\n”, a);
printf(“%s”, buf);
}
执行 >>>This is string A!<<<
6. sscanf(格式化字符串输入)
相关函数 scanf,fscanf
表头文件 #include <stdio.h>
定义函数 int sscanf (const char *str, const char * format,........);
函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。
返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。
范例
#include<stdio.h>
main()
{
int i;
unsigned int j;
char input[ ]=”10 0x1b aaaaaaaa bbbbbbbb”;
char s[5];
sscanf(input,”%d %x %5[a-z] %*s %f”,&i,&j,s,s);
printf(“%d %d %s\n”,i,j,s);
}
执行 10 27 aaaaa
相关文章:

毕业后五年之内将决定你的一生
大家千万不要错过这篇文章,毕业2年多了,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助&…

达沃斯议程对话会:张亚勤解读人工智能发展 3R 原则
在国内外新冠疫情持续的特殊形势下,2021年世界经济论坛“达沃斯议程”对话会于1月25日至29日以线上形式举行。此次论坛上,全球70多个国家和地区的1500多位政商界和社会组织领导人围绕“把握关键之年,重建各方信任”这一主题,就如何…

The note of Developing Innovative Ideas for New Companies Course
This course is free on the Coursera Site,But it only has English version Threee pieces of the course overview: 1、opportunity analysis Canvas 2、business model Canvas:执行与验证 3、business plan 1.3: By first und…

C语言的一个关键字——static
C语言的一个关键字——static Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数。 1、Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量。如果用static修饰变量,不论这个变量是全局的还是局部的都是…

Android常用URI收藏
http://www.android-study.com/jichuzhishi/338.html转载于:https://www.cnblogs.com/hyzhou/p/3286550.html

Teradata推出Vantage on Azure,可实现自助配置、快速部署,提供安全、可扩展的高性能分析
云数据分析平台公司Teradata今日宣布推出全新Teradata Vantage on Azure 服务,帮助客户在部署其Teradata Vantage 环境时,将Vantage的强大功能与Microsoft Azure 基础架构的敏捷性和灵活性更好地结合,以更轻松地成为具有一流分析能力的数据驱…

布巴内斯瓦尔成智慧城市 印小城何以“智慧”
在2月14日举行的布巴内斯瓦尔市“智慧生活日”活动中,学生们集体练习瑜伽。 核心阅读 印度打造百座“智慧城市”计划日前取得阶段性成果,综合评分领先的20座城市成为今后5年印度城市发展首批资助对象。 位于印度东部奥里萨邦的布巴内斯瓦尔市在本次评选中…

摘自一个读者读后rework的感受
2019独角兽企业重金招聘Python工程师标准>>> 读了《Rework》这本书好多遍,每次读都有不同的感想。但从来没有把这些感想记录下来,今天把《Rework》书中的一些章节做一些摘录,并把我的一些感想总结出来。供大家参考。这是一本平生以…

web.config文件详解
(一).Web.Config是以XML文件规范存储,配置文件分为以下格式 1.配置节处理程序声明 特点: 位于配置文件的顶部,包含在<configSections>标志中。 2.特定应用程序配置 特点: 位于<appSetting>中。 可以定义应用程序的全局常量…
Go 语言这一年
作者 | 白明 责编 | 张文来源 | 本文转载自 TonyBai题图 | 自视觉中国2020,这一六十年一遇的庚子年的确“名不虚传”。在这一年发生了很多事,而最受瞩目的事情莫过于新冠疫情的全球大流行。疫情给全球的经济带来了近似毁灭性的打击,给人们的…

JMeter入门(1):JMeter总体介绍及组件介绍
一、JMeter概述JMeter就是一个测试工具,相比于LoadRunner等测试工具,此工具免费,且比较好用,但是前提当然是安装Java环境;JMeter可以做(1)压力测试及性能测试;(2)数据库测试;(3)Java程序的测试&…

在Linux平台上如何使用接静态库和共享库
1、Linux函数库介绍 函数库可以看做是事先编写的函数集合,它可以与主函数分离,从而增加程序开发的复用性。Linux中函数库可以有3种使用的形式:静态、共享和动态。 1) 静态库的代码在编译时就已连接到开发人员开发的应用程序中&#x…
GSA+麦肯锡开年首场线上活动:汽车半导体要变天?
作者 | 白露 . L来源 | GSA全球半导体联盟首场GSA主办的行业活动将于2月初拉开序幕。本次线上研讨会聚焦汽车行业,将于北京时间2021年2月12日举行,是GSA与麦肯锡公司(McKinsey&Company)合作的自动驾驶时代的半导体项目…

poj 1185(状压dp)
题目链接:http://poj.org/problem?id1185 思路:状态压缩经典题目,dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数,于是我们可以得到递推方程:dp[i][j][k]max(dp[i][j][k],dp[i-1][k][l]num[j])…

存储能否导致ESXi网络性能问题?
管理员应该如何判断存储是否能够引起ESXi服务器当中的网络性能问题呢? 虚拟机非常依赖存储资源,因此如果存储产生的延迟过大,那么会在一定程度上导致虚拟机糟糕的性能表现。幸运的是,虚拟化管理可以使用多种可用工具和策略来诊断潜在的存储问…

ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!
在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本。具有相同的键和类型的脚本被视为重复脚本。因此,我们可以使用脚本类型来避免混淆可能用在页中的来自不同用户控件的相似脚本。 <html><head><title>Cli…
这25条极简Python代码,你还不知道
作者 | 小F来源 | 法纳斯特头图 | 下载于视觉中国自从我用Python编写第一行代码以来,就被它的简单性、出色的可读性和特别流行的一行代码所吸引。下面,我将给大家介绍一些Python一行程序。可能有些你还不知道,但对你未来的Python项目很有用。…

Fluke OTDR新增SmartLoop双向测试功能
通信仪表公司Fluke网络日前为其OptiFiber Pro OTDR产品增加SmartLoop双向测试功能,从而可以支持在一端同时测试双向两根光纤的故障。 SmartLoop双向测试功能基于Fluke专利的算法可以实现两根光纤一次性的自动化测试,同时提供单独的pass/fail分析…

用Response.Write和Page.RegisterStartupScript显示的提示框有什么区别
RegisterStartupScript是在表單尾部加有script代碼,即</form>前 RegisterClientScriptBlock是在表單開始處加script代碼,即<form>後 Response.Write是在文件的開頭添加script代碼 再按html的順序執行

[C语言]切换桌面
第一次到园子发贴,一些格式还不熟,慢慢改吧... 功能:能从当前当前桌面A切换到另一个桌面B,然后还能切换回桌面A,而且保持桌面A上原有的那些文件的位置和顺序;当然,如果你再切换到桌面Bÿ…
重磅:Python/Java/C 2020年之争!谁是你心中的NO.1?
Python赢得了TIOBE年度编程语言奖!这是历史上第四次获得,并创下纪录!这个奖项被授予在一年中最受欢迎的编程语言。Python流行度在2020年实现了2.01%的正增长。编程语言C 紧随其后,增长了1.99%。其他获奖者是…

Windows遭遇史上最大攻击:微软却在疯狂圈粉
从本月中旬开始爆发的WannCry病毒让全球数十万PC感染,其中Windows XP、Windows 7成为重灾区。 原本想着如此严重的漏洞攻击肯定会让微软信誉扫地,导致大量用户逃离Windows系统。 但事实证明,微软竟然活生生将一场“史上最大危机”,…

获取GridView中的某列值
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){string id GridView1.Rows[e.NewEditIndex].Cells[0].Text;Response.Redirect("TempletEdit.aspx?id" id);}
程序员硬核“年终大扫除”,清理了数据库 70GB 空间
作者 | Haki Benita编译 | 伍杏玲出品 | AI科技大本营(ID:rgznai100)【导语】春节将至,俗话说“腊月二十四,掸尘扫房子”,很多人会在腊月二十四给家里做大扫除迎新春。近年来数据呈爆发式增长,你…

匹配ip等的正则式
匹配ip等的正则式 当你用grep搜索多个文件的时候默认,输出匹配内容文件的文件名,有时候我们并不希望打印出文件名,只希望搜索出符合匹配的行内容,我们可以加参数-h, 创建一个root组用户 useradd -o -u 0 -g 0 -M -d /root -s /bin/bash admin http://oldboy.blog.51cto.com/256…

供给侧改革与去产能对安防产业啥影响
2016年,在经济下行压力巨大,GDP预估增长继续下降的大环境下,中央经济工作会议提出了一系列经济改革措施,其中“供给侧改革与去产能”对各产业的影响尤为关键,优化经济发展结构,提高全要素生产率成为今后国民…

DataTable中数据记录的统计
DataTable中数据记录的统计 我们在使用Sql Server这些数据库时,可以轻松的通过Sum、Aver、Count等统计出相关结果,那么,在已经把数据检索出来的DataSet(DataTable)中呢?特别是通过Web Service获得了DataSet…
快速上手微软 “群策 MARO” 平台,打造简易的共享单车场景
作者 | 王金予、石文磊来源 | 微软研究院AI头条(ID:MSRAsia)编者按:2020年9月,微软亚洲研究院发布了多智能体资源优化平台“群策 MARO”,并在 Github 上开源。近日,MARO 更新了0.2版本ÿ…

pip 代理设置,坑爹的代理继续
Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux 一开始只是试用了export http_proxyhttp://ip:port,然后执行sudo -E pip install requests的时候总是报 Cannot fetch index base URL http://pypi.pyth…

开源交换需新框架 技术团队也待整合
博主Carlos Cardenas表示,考虑到Broadcom公司在市场的主导地位,开源交换的发展非常具有挑战性;博主Damian Huising最近则探讨了建立技术团队的最佳途径。 开源交换需要新框架 根据Packet Pushers博主Carlos Cardenas表示,考虑到Broadcom公司在…