码迷,mamicode.com
首页 > 其他好文 > 详细

依旧是输入输出(存字符矩阵,空格,换行)

时间:2018-10-04 09:05:23      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:错误   回车   bubuko   存储   导致   枚举   标准输入输出   标准   方便   

PAT倒福的题就因为输入输出……第一个样例过了,后面的根本就是存储错误?

今天主要针对怎样输入字符矩阵、字符串、空格换行进行叙述。

scanf是格式化输入,printf是格式化输出。 cin是输入流,cout是输出流。效率稍低,但书写简便。cin的实时性较差,因为它使用了缓冲区,一般情况下满了才刷新的。

对于字符:cin的输入忽略空格和回车。scanf("%c",&i)等价于i = getchar(),换行符和回车都会被读入。

一、对于输入字符串矩阵来说,一般会用到二重循环,对于回车符的吸收问题,理论上讲getchar()可以使用,但不知道为什么,做题的时候会多吸收字符,这里推荐使用另外一种方法:

    技术分享图片

  具体原因还不知道,只是知道可以这么用。
  cin只是吸收单个字符,不会吸收回车或者空格,但如果每行的字符是连续输入,则建议是使用getline(cin,数组名)或是cin.getline(数组名);
  但由于是流输入,效率会差;号要考虑缓冲区是否已满的情况,会用到cin.ignore();
二、输入有空格的字符:
  scanf("%c ",&c);或是cin>>c;
  cin虽然方便但效率差,建议使用scanf;

对于一般数据的输入,没有太大问题,有问题继续添加。下面是其他人遇到的问题,目前我还没遇到。

笔试的时候经常遇到突然string s;cin>>s;

有的时候编译会错误,不知道为什么。

 {

………………………………………………………………………………………………………………………………

今天在练习枚举类型的时候,也遇到这样一个问题。

enum weekday{Monday,Tuesday} day;

cin>>day;//报错

scanf("%d",&day);//正常

周纯洁的书上也都是用scanf;看样子scanf和printf不能随便丢弃啊。毕竟是标准输入输出流,没有缓存区

scanf是格式化输入,printf是格式化输出。 
cin是输入流,cout是输出流。效率稍低,但书写简便。 
 
格式化输出效率比较高,但是写代码麻烦。 
 
流输出操作效率稍低,但书写简便。 
 
cout之所以效率低,正如一楼所说,是先把要输出的东西存入缓冲区,再输出,导致效率降低。 
 
缓冲区比较抽象,举个例子吧: 
 
曾经就遇到过这样的情况(类似的), 
int i; 
cout<<‘a‘; 
cin>>i; 
cout<<‘b‘; 
运行结果什么都没看到输出,输入一个整型比如3再按回车后ab同时显示出来了。 
但是这样的情况并不是经常发生,是在一些比较大型的工程中偶尔出现,原因是字符a先到了缓冲区,但是没输出,等输入了i,b进入 
缓冲区后再一并输出的。 
流输入也是差不多的。
………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
}

对于scanf的具体用法:
scanf 后面的参数,就是要 写变量的 地址。所以 int a,b; 就要 用 &a,&b 形式来调用 scanf.
可是,如果是字符串,char s[10]; scanf("%s",s); 参数 s 就 不要 &. 因为 s 就是 地址形式。
http://bbs.bccn.net/thread-236258-1-1.html 这里有非常详细的讲解。

未完待续……

依旧是输入输出(存字符矩阵,空格,换行)

标签:错误   回车   bubuko   存储   导致   枚举   标准输入输出   标准   方便   

原文地址:https://www.cnblogs.com/lyqf/p/8805106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!