当前位置:C++技术网 > 精选软件 > C++语言零基础入门教程:2.6 标准输出printf和cout的对比分析

C++语言零基础入门教程:2.6 标准输出printf和cout的对比分析

更新时间:2015-09-30 15:00:00浏览次数:1+次

   在上一节《C++语言零基础入门教程:2.5 标准输入输出流的剖析》中详细介绍了标准输入输出的背景知识。在第二章中,这几节都是简洁的介绍,主要是将一个基本的程序结构讲给大家看看。详细的展开则会在后面的章节里。所以,你可能感觉到,这几篇文章似乎内容比较少哦,因为我们要针对零基础的同学哦。没关系的,这里就只需要大概了解,在介绍后面的基础知识时,经常会用到本章的几个知识,所以这样你能够比较清楚的了解到这些使用的东西,不至于强行盲目的记忆。对于什么都没有基础的同学来说,无法展开太多,否则,就无法接受。如果你有些基础,请谅解。
    包含预编译指令#include、头文件iostream、标准命名空间std和标准输入输出流,都做了简要的分析。下面我们需要再将经常使用的标准输入输出的使用,讲解一下。然后,再讲述一下C++控制台程序的生命周期,这样就完整的描述了第一个程序的全部。在后面每一章,再铺开讲述。
    标准输入输出的使用,我们在此也是做简要的介绍,深入的解释,在相关章节细致讲解。
    标准输入输出,就是将结果输出显示在屏幕中,从键盘获得输入的数据。我们暂不考虑其他错误输出等。目前来讲,不需要,在相关章节里,会讲到的。
    在C语言中,输出使用格式化输出函数printf,语法样例为:
printf("输出的内容,%d",14);
     printf是函数名,声明在stdio.h中,当然,iostream头文件的一层层的包含中(即一个头文件中包含一个头文件),最终包含了cstdio头文件。而在cstdio头文件中,有这么一句代码:
using _CSTD printf; 
     这个代码就是导入printf标识符的意思,而这个标识符的声明是在标准命名空间中的,导入之后,就可以直接使用了。这就是为什么虽然只包含了iostream头文件就可以使用C语言的这些函数了。这是C++语言出于兼容C语言的做法。因为很多学习C++语言的人是从C语言转入的,或者有时候有使用C语言这些函数的必要。从这里你可以看到了C++语言是C语言的超集的冰山一角,也就是C++语言不仅涵盖了C语言的语法,思想和库函数的使用等,还发展出了很多C语言没有的东西,比如面向对象,而C语言的部分就成了C++的一部分了。这也就是超集的说法来源。
    所以,适当的了解下C语言的知识,对于C++本身并不是超越范围的。但是,我们只是去了解,不必太较真与C语言的这些,毕竟,使用C++的特性,可以更好的理解C++,可以更好的提高开发效率。我们马上从对比中可以看到C++带来的好处。
    printf的第一个参数就是一个字符串,在字符串内部,一般输入什么,最后就显示什么。但是很多时候,我们需要根据不同的情况,保持一些内容不变,而只需要变个别内容,比如递增序号。
当前处理的卡号:34
当前处理的卡号:35
当前处理的卡号:36

     那么此时,我们并不需要每次都全部输出一遍,而只需要变化后面的数字即可。那么C语言提供了一个格式化的功能,就是可以在字符串中,加入保留符号%然后紧接着一个字母,就组成了一个格式输出特定组合。比如%d表示的是输出一个十进制的整数。
    那么我们在大量的循环输出一个显示时,只需要不停的更换要显示的数字即可。而这个数字,就和双引号中的格式化输出特定组合一一对应,这样就可以将要输出内容按照格式化组合代表的意思输出。不同的格式化组合,输出的效果是不一样的。比如10这个数字,你让它按照十进制输出,就是10两个字符。如果按照十六进制输出,则是A。诸如此类。虽然,原始内容一样,但是看到的却不一样。所以,格式化组合你必须记得清清楚楚,不能写错。而格式化输出一部分见下图:

    格式化组合,格式化符
    而这些还只是其中一部分哦。而要记忆这些,可是比较麻烦的,反正我的记忆不好,现在也记不住几个,反正,用的时候再查,不过要是能记得清楚,那肯定是最好的。不然每次查,也是挺麻烦的。而要输出的要被格式化的内容,则是在printf的第二个参数开始的。printf第一个参数的双引号中有多少个格式化组合,第一个参数后面就需要多少个被输出的内容,而这个内容可以是任何可以输出的东西。为了不给初学者造成压力,这里不讲专业术语的表达式之类的。
    所以,如果你要输出三个数字,可以这样:

printf("第一名:%d 第二名:%d 第三名:%d",100,98,88);
     这里就将三个数字格式化到了三个格式化输出组合的位置,最终替换了%d这个格式化组合,而%d表示的就是十进制整数。所以最后输出的就是:
第一名:100 第二名:98 第三名:88
     当然这个是看似没有必要,而如果要不断的改变后面的数字,就可以达到改变输出的内容了。你不需要每次都修改双引号内的东西了。我们在程序中,肯定不会去输出这个数字这么简单,通常是输出一个变量的值。变量就是可以改变变量的值的东西,那么我们程序就可以不断的改变变量,然后格式化到字符串里,这样输出的内容就不断的改变了。
    这个可以很好的解决输出格式化的要求。但是问题来了,程序员的压力就很大了,要记忆格式化组合,要保证组合数和后面参数对应上,还要对应正确等等问题。
    而C++语言中,就极大的简化了这个功能。你不必去关注格式化的方面的事情了,C++帮你自动处理好正确的格式,很智能。使用的就是输出工具cout。那么上面的输出你可以写成:
cout<<"第一名:"<<100<<"第二名:"<<98<<"第三名:"<<88;
     你只需要依次输出这些内容,然后在中间连接上要输出的内容即可。不必去管什么格式化,你给定的类型,cout就会按照这个类型来输出。多个字符串,使用<<连接就可以了。如果你要换行,可以在字符串中输出换行符\n即可。或者在<<后面输出endl标识符就可以了。比如:
cout<<"第一名:"<<100<<endl;
cout<<"100\n":
     以上两种都可以达到换行的效果,至于适用场合,\n适合后面没有接东西的换行,而endl则是最后面接了其他东西,导致不能直接在字符串中换行而使用。这样不用在最后面单独加入一个"\n"这样的,比如:
cout"第一名:"<<100<<"\n";
     这样虽然效果一样,不过,写起来就比较麻烦了。两个可以灵活使用。
    而对于cout本质的东西,则涉及到更多的知识,暂时你就将它当做是标准输出的工具即可。这里就是对比C语言的printf和C++语言的cout的使用,让你感受到C++带来的便捷。不过在此,也只是稍作介绍,下一节讲述标准输入的内容,也是简单介绍一下。先简单了解,我们再铺开讲述。