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

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 这里有非常详细的讲解。

未完待续……

转载于:https://www.cnblogs.com/lyqf/p/8805106.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值