C语言printf家族的那些子事儿

1、printf是有返回值的你咋造吗?

返回值是输出的长度

#include <stdio.h>
{
    int n;
    scanf("%d",&n);
    n=printf("%d",n);
    printf(" has %d digits\n",n);
    return 0;
}

若输入“321”,则会输出“ 321 has 3 digits”
增强理解

2、scanf接收空格的方法

#include <stdio.h>
{
    int n;
    char str[100];
    scanf("%[^\n]",str);
    n=printf("%s",str);
    printf(" has %d digits\n",n);
    return 0;
}

【[ ^\n ]】的意思是除了换行符以外,这样scanf就可以接收带空格的字符串了

3、sprintf的应用

#include <stdio.h>
#define swap(a, b){\                   //???
    __typeof(a)__temp = a; \
    a = b; b = __temp;\
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n", n);
    char str[1000] = {0};
    buffer[1000] = {0};
    *p = str;
    *q= buffer;
    sprintf(str,"%d.%d.%d.%d"19216812);
    printf("%s\n", str);
    if (n & 1)                           //???
    {
        sprintf(q,"(%s)",p);
        swap(p,q);
    if (n & 2) 
    {
        sprintf(q,"[%s]", p);
        swap(p,q);
    }
    if (n & 4) 
    {
        sprintf(q,"{%s}", p);
        swap(p,q);
    }
    printf("%s\n", p);
    
    return 0;
}

n % 2就等价于n & 1
输出:
在这里插入图片描述

4、fprintf的应用

#include <stdio.h>
#define swap(a, b){\
    __typeof(a)__temp = a; \
    a = b; b = __temp;\
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n", n);
    char str[1000] = {0};
    buffer[1000] = {0};
    *p = str;
    *q= buffer;
    sprintf(str,"%d.%d.%d.%d"19216812);
    printf("%s\n", str);
    if (n & 1) 
    {
        sprintf(q,"(%s)",p);
        swap(p,q);
    if (n & 2) 
    {
        sprintf(q,"[%s]", p);
        swap(p,q);
    }
    if (n & 4) 
    {
        sprintf(q,"{%s}", p);
        swap(p,q);
    }
    printf("%s\n", p);
    
    FILE *fout = fopen( "output", "w");
    fprintf(fout,"str = %s\n", p);
    
    return 0;
}

用FILE这一文件类型定义一个fout的文件指针,他存储的是一个文件描述符,用fopen这样一个方法去打开一个文件,文件名output,w为写入操作

此时执行:
在这里插入图片描述
会发现fprintf并没有显现出来,通过ls查询可以看到有一个output文件,打开即可看到fprintf的输出结果
在这里插入图片描述

5、stdout标准输出的应用

#include <stdio.h>
#define swap(a, b){\
    __typeof(a)__temp = a; \
    a = b; b = __temp;\
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n", n);
    char str[1000] = {0};
    buffer[1000] = {0};
    *p = str;
    *q= buffer;
    sprintf(str,"%d.%d.%d.%d"19216812);
    printf("%s\n", str);
    if (n & 1) 
    {
        sprintf(q,"(%s)",p);
        swap(p,q);
    if (n & 2) 
    {
        sprintf(q,"[%s]", p);
        swap(p,q);
    }
    if (n & 4) 
    {
        sprintf(q,"{%s}", p);
        swap(p,q);
    }
    printf("%s\n", p);
    
    FILE *fout = fopen( "output", "w");
    fprintf(stdout,"stdout = %s\n", p);
    
    return 0;
}

此时结果出现在终端上,因为终端就是标准输出的一个界面
在这里插入图片描述

6、stderr标准错误的应用

#include <stdio.h>
#define swap(a, b){\
    __typeof(a)__temp = a; \
    a = b; b = __temp;\
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n", n);
    char str[1000] = {0};
    buffer[1000] = {0};
    *p = str;
    *q= buffer;
    sprintf(str,"%d.%d.%d.%d"19216812);
    printf("%s\n", str);
    if (n & 1) 
    {
        sprintf(q,"(%s)",p);
        swap(p,q);
    if (n & 2) 
    {
        sprintf(q,"[%s]", p);
        swap(p,q);
    }
    if (n & 4) 
    {
        sprintf(q,"{%s}", p);
        swap(p,q);
    }
    printf("%s\n", p);
    FILE *fout = fopen( "output", "w");
    fprintf(stdout,"stdout = %s\n", p);
    fprintf(stderr, "stderr = %s\n", p);
    return 0;
}

在这里插入图片描述
标准输出重定向【./a.out > output】
再运行时,选定蓝框的东东就没有了,输出的结果进入到output这个文件夹里了
在这里插入图片描述
stdin是标准输入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值