今天做老师的NOIP基础训练。。我去这简直就是输入输出练习集锦。。因为题目太水了, 每道题的WA都是因为输入输出什么的。。不过这方面的确问题挺大的。
首先是C++和G++的区别问题, 。。这本来就没有什么区别啊。。反正DEV全都可以过, 但是各种OJ的编译器就会出现各种各样的问题, 比如说G++中double的scanf要用 lf, 但是printf就必须要用f 了,,我去这是什么规定啊! c++没有这个问题。 还有比如说 #include <string> 这个问题, 我一直都以为这里include的string 和 cstring 还有string.h 是没有什么区别的(好像真的没有什么区别), 但是如果编译器选得是C++, include cstring 或者 string.h 就会错,,,必须include string。。。。囧。 还有在很多时候输入的时候用scanf("%s", s)就会出现各种各样的问题。。囧, 所以最好用getline。 这里再贴一下, getline 系列的用法吧。
问题一: #include <iostream> #include <string> using namespace std; void main(void) { string st ; cout<<"Input st:"; getline(cin,st); cout<<st<<endl; } 上面这段代码,如果输入abc,那么需要按两次回车键才能显示abc(在VC6中),因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输入了,比如写成 getline(cin,st,'s'); 即使输入的是abcsabc 那么也只会显示 abc ,因此对于上面出现的情况,有人说getline默认情况下以回车('\n')作为结束符,第一次按回车表示字符串结束,第二次按回车才开始输出。也有人说这是VC6的bug,我觉得前一种解释比较合理,因为: 如果你输入abc(回车)abc,那么程序会显示abc,可见回车的确是函数默认的结束符。 同理1getline(cin,candybar[i].pinpai); 就是当输入一串字符串后赋值给candybar[i].pinpai,然后再按二次回车才显示在屏幕上! 问题二: 1.cin.getline是读入一行字符,比如: #include <iostream.h> void main() { char str[20]; cout<<"Input :"; cin.getline(str,20); cout<<str<<endl; } 当输入:abd cdrasdf g的时候就会输出:abd cdrasdf g。 2.cin.get()第一个用法,是读入一个字符。 #include <iostream.h> void main() { char str; cout<<"Input :"; str=cin.get(); cout<<str<<endl; } 当你输入“ABAF”的时候,只会显示“A”,因为只读入了一个字符(空格也可以读入)。 3.cin.get()第二个用法,也是输入一行(同cin.getline()),但是区别就是,不输出分隔符~ 你的提问,应该是第三个用法 cin.clear();//清空输入流