今天来学习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也有能接受参数和输入重定向的功能,这个之后会在系统编程中也让自己写的程序同样支持:
好了,今天的内容学到这里,不是太难,但是都很重要,下次再见!!
关注个人公众号,获得实时推送