C学习---输入输出

今天来学习c语言中强大的输入输出相关的东东,很基础,但是也很重要,话不多说,进入主题:

printf

 下面对其进行介绍:

运行结果:

打印结果:

运行结果:

运行结果:

如果不足位,想补指定的字符,可以这样:

运行结果:

运行结果:

注意:这种方式,没法用指定的字符来补不足的位数,如下:

运行结果:

同时也对字符串的输出有效:

运行结果:

特别看一下"*"修饰符的用法:

运行结果:

最后贴上一些转义字符,以供以后可以参考:

scanf

所以如果想以空格来区分不同类型的输入,则可以照上面的方法来:

输入/输出缓冲

对于我们的输入输出,实际上都会对应一个内存缓冲区,并非直接显示在我们的输出设备(屏幕)上

为了说明这个问题,下面以输出字符串为例,来说明缓冲区的概念:

运行结果:

可以很清楚地看到,printf中的字符串并没有马上打印出来,而是休眠之后,程序退出了再打印的,这说明首先输出的内容是在缓冲区的,等程序退出时,才会刷到屏幕设备上的。

那有没有立既从缓冲区刷新到设备的方法呢?有如下两种:

结果:

另外一种是用fflush函数:

结果如下所示:

控制台输入/输出

字符输入函数getchar()

字符输入函数putchar()

结合上面的控制台输入/输出函数,来实现以下shell命令同样的功能:

cat示例

先看一下原型的cat命令的效果:

接着自己实现同样的效果:

实际上,原理就是根据输入缓冲区来实现的。

另外,cat还有以下两种功能:

wc示例(单词统记命令,对于这个命令,Linux基本命令 - cexo - 博客园有介绍)

先看一下原型的wc命令的效果:

接下来自己实现同样的功能:

#include <stdio.h>
#define IN    1  //代表当前处理单调里面
#define OUT    0  //代表当前处理单词处面
int main(void)
{
    int c, nl /** 用来行数统计 **/, nw /** 用来单词个数统计 **/, nc/** 用来总字符个数统计 **/, state /** 记录是否是当前处理单词里面还是外面 **/;
    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF)
    {
        ++nc;
        if (c == '\n') //代表是新的一行
            ++nl;
        if (c == ' ' || c == '\n' || c=='\t')  //证明当前处于单词外面
            state = OUT;
        else if (state == OUT) //证时是一个新的单词
        {
            state = IN;
            ++nw;
        }
    }
    printf("\t%d\t%d\t%d\n", nl, nw, nc);
}

运行结果:

另外对于wc也有能接受参数和输入重定向的功能,这个之后会在系统编程中也让自己写的程序同样支持:

好了,今天的内容学到这里,不是太难,但是都很重要,下次再见!! 

关注个人公众号,获得实时推送

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webor2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值