存档

文章标签 ‘cin’

C++输入函数再贴一篇

2010年4月12日 Yarkee 2 条评论

当然,还是先要声明,这篇是转载的。

1、cin>>          

用法1:最基本,也是最常用的用法,输入一个数字:

#include <iostream>
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

输入:2[回车]3[回车]
输出:5

用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束

#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}

输入:jkljkljkl
输出:jkljkljkl

输入:jkljkl jkljkl       //遇空格结束
输出:jkljkl

阅读全文…

分类: 编程 标签:

转载:cin深入分析(下) – cin的错误处理

2010年3月27日 Yarkee 没有评论

在前一节中我们有几个例子中提到了cin函数出错,以致不再执行读操作(程序8)。而且我们经常会看到程序中会出现cin.clear(),cin.ignore(), cin.fail()等函数。这些函数都是与cin的错误处理有关的。这一节我们来分析一下cin的错误处理机制,并且学习几个重要的函数:cin.fail(), cin.bad(), cin.good(), cin.clear(),  cin.ignore()等。

程序执行时有一个标志变量来标志输入的异常状态,其中有三位标志位分别用来标志三种异常信息,他们分别是:failbit,eofbit,badbit。这三个标志位在标志变量中是这样分配的:
____________________________________
|     2     |     1    |     0     |
|  failbit  |  eofbit  |   badbit  |
|___________|__________|___________|
看一下这几个标志位的作用(引用msdn):
badbit, to record a loss of integrity of the stream buffer.
eofbit, to record end-of-file while extracting from a stream.
failbit, to record a failure to extract a valid field from a stream.
In addition, a useful value is goodbit, where no bits are set.

接下来我么看几个ios类的数据定义(引用msdn):
typedef T2 iostate;
static const iostate badbit, eofbit, failbit, goodbit;

这里ios类定义了这四个常量badbit, eofbit, failbit, goodbit,其实这四个标志常量就是取对应标志位的掩码,也即输入的四种异常情况!
以上四个常量对应的取值为:
ios::badbit    001   输入(输出)流出现致命错误,不可挽回 
ios::eofbit    010   已经到达文件尾
ios::failbit   100   输入(输出)流出现非致命错误,可挽回
ios::goodbit   000   流状态完全正常, 各异常标志位都为0

我们可以用输出语句来验证这几个常量的值:
cout << ios:: failbit << endl;
cout << ios:: eofbit << endl;
cout << ios:: badbit << endl;
cout << ios:: goodbit << endl;
输出的结果为:
4
2
1
0
【注意】它们不是failbit、badbit、eofbit、goodbit这四个标记位的存贮变量,而是四个标志四种异常状态的常量,其实他们就相当于取对应状态标志位的掩码。如果标志变量为flag,则flag & failbit 就取得fail标志位。

阅读全文…

分类: 编程 标签:

转载:cin深入分析(上) – cin输入操作处理

2010年3月27日 Yarkee 没有评论

问题描述

很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(), cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:

程序1

#include <iostream>

using namespace std;

int main()

{

int m, n;

cin>>m;

cin>>n;

return 0;

}

测试情况:

如果用户每次都输入两个合法的数,程序不会出问题!

但是如果用户第一次输入时给一个非法的输入,比如说输入一个字符’a',你会发现程序不

会再执行第二条输入语句。似乎有点奇怪!!

程序2

#include <iostream>

using namespace std;

int main()

{

char str[8];

cin.getline(str, 5);

cout<<str<<endl;

cin.getline(str, 5);

cout<<str<<endl;

return 0;

}

程序的功能很简单,就是输入一个字符串再输出,再次输入一个字符串输出。程序执行情况:

测试一:

abcd (回车)

abcd (输出)

efgh (回车)

efgh (输出)

当用户第一次输入的字符串字符数小于4时,程序执行正常!

测试二:

abcdefgh (回车)

abcd (输出)

(输出-换行)

当用户第一次输入的字符数字符数大于4时,第一个字符串接受输入的前四个字符,而第二次的输入操作没有执行,第二个字符串输出为空。似乎也很奇怪!!!

其实在很多时候都会遇到诸如此类的问题,如果不熟悉程序输入的原理和cin等一些函数的原理就不知道怎么解决!我在这里做一个简单的介绍,也许介绍得不是很准确和全面,或者存在一些误解,请大家包涵!

阅读全文…

分类: 编程 标签: ,

WP SlimStat