• 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()的返回值是输出的字符数,发生错误时返回一个负值.

  • 相关阅读:
    ReactNative手势解锁(react-native-ok-gesture-password)
    Android通过DeepLink方式跳转其他App传递参数
    Android中注解的使用
    Windows平台下Flutter安装,配置,初运行。
    Android中MD5加密
    Android中WebView使用全解
    关于windows系统服务的操作
    java:String类型转换
    webservice服务器部署
    webservice生成客户端
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/3679758.html
Copyright © 2020-2023  润新知