输入输出

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

printf

 

 下面对其进行介绍:

运行结果:

打印结果:

 

运行结果:

运行结果:

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

运行结果:

运行结果:

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

运行结果:

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

运行结果:

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

运行结果:

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

scanf

 

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

 

输入/输出缓冲
对于我们的输入输出,实际上都会对应一个内存缓冲区,并非直接显示在我们的输出设备(屏幕)上
 
为了说明这个问题,下面以输出字符串为例,来说明缓冲区的概念:
运行结果:
可以很清楚地看到,printf中的字符串并没有马上打印出来,而是休眠之后,程序退出了再打印的,这说明首先输出的内容是在缓冲区的,等程序退出时,才会刷到屏幕设备上的。
那有没有立既从缓冲区刷新到设备的方法呢?有如下两种:
结果:
另外一种是用fflush函数:
结果如下所示:
 
控制台输入/输出
字符输入函数getchar()
 
字符输入函数putchar()
 
结合上面的控制台输入/输出函数,来实现以下shell命令同样的功能:
cat示例
先看一下原型的cat命令的效果:
接着自己实现同样的效果:
实际上,原理就是根据输入缓冲区来实现的。
另外,cat还有以下两种功能:
wc示例(单词统记命令,对于这个命令,http://www.cnblogs.com/webor2006/p/3404741.html有介绍)
先看一下原型的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也有能接受参数和输入重定向的功能,这个之后会在系统编程中也让自己写的程序同样支持:

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

posted on 2013-11-26 21:38  cexo  阅读(255)  评论(0)    收藏  举报

导航