各种奇葩的输入输出

今天做老师的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();//清空输入流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值