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 这里有非常详细的讲解。
未完待续……