浅谈c,c++输入输出

来源:互联网 发布:淘宝市场行情教学视频 编辑:程序博客网 时间:2024/05/29 00:30

最近写程序,被最简单的输入输出整了一头雾水,真正的体验到“不识庐山真面目,只缘身在此山中”的压抑感,好在不甘沉沦的偶,几经爬山涉水,终于走出庐山,恍惚间有种“会当凌绝顶,一览众山小”的畅快,接下来我将最近几天的所得与大家分享,便于大家少走弯路,进入正题,你试着用c语言定义一个字符型的二维数组3*3的就可以,然后输入三行三列的“*”,输出结果看看是否和输入的一样,如果一样的话,下文对你来说就没有太大意义了,如果不是你想要的效果的话,就继续看下去:

过去一直觉得任何语言的输入输出,是最简单不过的。对于大多数接触过程序的童鞋以及同事们来说,初学编程时接触到的第一个程序就是“Hello World!”(此处忽略那些怪才们的存在……),当时看到成功显示在黑屏上的“Hello World!”,那个激动的心情啊,无以言表,想必大家都跟我感觉大同小异。其实这也就是一个简单的输入输出问题。可如今再次面对这个问题时,才知道自己依然未能深入理解这几个函数:printf,scanf,cin,cout。这几个大家都用过,但是我想可能有一大部分人轻视了这几个函数,就实现程序的输入与原样输出为例,可以察觉到了它们之间的差异:


但这不能说明两者等价,接下来就是见证不一样的时刻(哈哈):

字符型的输入和输出时两者的差异明显体现:


用scanf单个字符输入(格式符为%c)只输入了两行,敲完回车键后结果就出现,这当然不是我们要的效果。如果我们还如前面输出的样式,在每个字符后加上空格,在每行结束添加换行,效果就如右图的结果。

   

而用cin输入后,cout输出如上图左边效果,如果再在此基础上是加上适当的空格与回车符,则效果达到了预期。

综上分析:scanf输入是将空格和换行符当作字符存入到了数组中,进而我们只输入两行,结果就跳出了,那是因为输入的字符,已经达到了上限,‘a’+‘空格’+‘a’+‘空格’+‘a’+‘换行’+‘b’+‘空格’+‘b’一共9个字符,填满3*3的字符数组,因而输出以上效果。

而用cin单个字符输入的话,cin会过滤掉空格和换行,也就是无视空格和换行,因而结果会呈现出aaabbbccc的样式,再加上空格和换行就成了所需要的效果。如果cin整行输入是其效果如同%s格式符一样,遇到空格或者换行结束。

那么如何解决这些问题呢?

对于只用过c或者正在用c编程的童鞋们来说,如何正确的用scanf,printf输入输出显得至关重要,其实方法很简单,只需要scanf函数后加上一个getchar(),将并非我们想要的空格和换行吃掉即可。

针对字符数组,我们也可以通过格式化符号“%s”,%s读入一整行,遇到空格或者换行结束,如果输入的字符串有空格的话,这种方式就不行了,那么针对c++有一个函数getline可以派上用场,例输入样式string str; getline(cin,str,'\n'),如果用c语言的话输入的时候需要将格式化符号写成“%[^\n]”的形式。例输入样式char str[50];scanf(“%[^\n]”,str)。

估计还有许多没考虑到,不过大概这些就够用了,希望对看到本文的童鞋、同事有帮助……



原创粉丝点击