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


下面对其进行介绍:


运行结果:



打印结果:


 
运行结果:











运行结果:

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

运行结果:



运行结果:

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

运行结果:





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

运行结果:


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

运行结果:

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

scanf






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


 



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

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

运行结果:

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

结果:

另外一种是用fflush函数:

结果如下所示:

控制台输入/输出

字符输入函数getchar()




字符输入函数putchar()

结合上面的控制台输入/输出函数,来实现以下shell命令同样的功能:
cat示例
先看一下原型的cat命令的效果:

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


实际上,原理就是根据输入缓冲区来实现的。
另外,cat还有以下两种功能:


wc示例(单词统记命令,对于这个命令,http://www.cnblogs.com/webor2006/p/3404741.html有介绍)

接下来自己实现同样的功能:
#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也有能接受参数和输入重定向的功能,这个之后会在系统编程中也让自己写的程序同样支持:


好了,今天的内容学到这里,不是太难,但是都很重要,下次再见!!
 
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号