scanf printf sprintf fprintf

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

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

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

举例:

#include <iostream>
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 ",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. "

详见http://blog.csdn.net/sjf331/article/details/339254

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 ", name );
对于其输出格式参数,和printf()一样.
fprintf()和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.

原文地址:https://www.cnblogs.com/Yogurshine/p/3679758.html