博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scanf printf sprintf fprintf
阅读量:6343 次
发布时间:2019-06-22

本文共 2355 字,大约阅读时间需要 7 分钟。

都是C语言中的函数,但C++保留了这些函数,在头文件iostream中声明了。

1 scanf(格式控制,输出列表)

printf (格式控制,输出列表)

举例:

#include 
using namespace std;int main(){ int a;float b;char c; //注意:格式控制之间有空格,变量名前面要加& scanf("%d %c %f",&a,&c,&b); printf("a=%d,b=%f,c=%c\n",a,b,c); return 0;}

可以看出:使用printf和scanf函数进行输入输出,必须指定输出和输入的数据的类型和格式,不仅繁琐复杂,而且很容易出错,比如变量定义类型个格式指定不一致,数据就会出错。

C++保留printf和scanf只是为了和C兼容,以便过去用C写的代码在C++下可以运行。而C++ 中cin,cout重载了基本类型的输入输出,可以方便使用。

至于printf("%.3f",b);等格式控制,C++中1 使用控制符输出格式 包含头文件(iomanip);2 使用流对象的成员函数控制输出格式。如cout.setf(ios::oct)等

还有C种两用两个函数sprintf,fprintf

1 由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,

后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。

sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。

如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123"

可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123, 4567); //产生:"     123     4567"

当然也可以左对齐: sprintf(s, "%-8d%8d", 123, 4567); //产生:"123             4567"

也可以按照16 进制打印: sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐

sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐

这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一 种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。 sprintf(s, "%08X", 4567); //产生:"000011D7"

上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。

浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保

留小数点后6 位数字,比如:
sprintf(s, "%f", 3.1415926); //产生"3.141593"
但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表
示打印的宽度,n 表示小数点后的位数。比如:
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"

连接字符串

sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连
接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时
在它们中间插入别的内容,总之非常灵活)。比如:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "

详见

3: fprintf()

int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.比如
char name[20] = "Mary";
FILE *out;
out = fopen( "output.txt", "w" );
if( out != NULL )
fprintf( out, "Hello %s\n", name );
对于其输出格式参数,和printf()一样.
fprintf()和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.

 

转载地址:http://sdkla.baihongyu.com/

你可能感兴趣的文章
公钥和私钥
查看>>
职业女性:学会减压救自己!
查看>>
OSChina 周一乱弹 —— 这个需求很简单!
查看>>
OSChina 周六乱弹 —— 如果杀人不犯法的话
查看>>
OSChina 周一乱弹 —— 温柔的人应该这样
查看>>
OSChina 周一乱弹 —— 我当你是朋友,你却……
查看>>
[Android官方API阅读]___<Device Compatibility>
查看>>
如何写出好的产品需求文档(PRD)?
查看>>
Flex Chart
查看>>
Python中实用却不常见的小技巧
查看>>
如何从命令行把ubuntu15.10升级到ubuntu16.04测试版本
查看>>
012# Adempiere系统的贸易流程(一)
查看>>
(一)阅读器客户端开发实战_引言
查看>>
python 函数的默认参数
查看>>
为何禁用MyBatis缓存
查看>>
手机安装 apk 出现“解析包时出现问题”
查看>>
在Android上面如何使用带有心跳检测的Socket
查看>>
Oracle用户被锁定解决方法
查看>>
485总线的概念
查看>>
我的友情链接
查看>>