CPP入门(3):输入、输出
2015-12-20 15:23
537 查看
CPP入门(3):输入、输出
获得字符串输入[code]int length; std::string name,name1,name2; std::cout << "Enter your name: "; std::cin >> name; //cin使用空白字符作为输入字符串的结束标志 length = name.size(); //返回某给定字符串里的字符个数 ,一个中文字或者中文标点符号占2个字节 std::cout << name << "\t" << length << std::endl; std::cin >> name1 >> name2; //一次读取多个字符值 std::cout << name1 << "\t" << name2 << std::endl;
cin对象在读入一个字符时将忽略空格,如果想读入任意一个字符,包括各种空白字符,可以使用cin对象的get()函数
[code]char myChar; std::cin.get(myChar)
读入一整行输入,可以使用std::getline()函数,调用它时,需要给出输入流的名字(比如“cin” )作为第一个输入参数,用来保存输入值的变量是第二个输入参数。
我们必须保证在调用std::getline()之前缓冲区里没有任何多余的输入:比如先读取一个整数,再读取一行文本,用户可能输入27后按下回车键,在把27赋给一个整数变量后,那个回车符还留在缓冲区,这将使得下一个std::getline()调用立刻停止读取输入
[code]std::string inputTxt; std::cout << "Say something !!" << std::endl; std::getline(std::cin,inputTxt); //默认情况下,读取数据,直到它遇到一个换行符,换行符是文本行的结束标志 std::getline(std::cin,inputTxt,'#'); //getline()还有一个可选的第3个参数,用来定义一个停止字符 std::cout << inputTxt << std::endl; //读取数据,直到它遇到一个#停止
std::getline()函数会丢弃作为作为文本行结束标记的字符,不管是换行符还是其它停止字符。
如果要丢弃输入数据(从缓冲区里删除它,不对它做任何处理),则可以使用ignore()函数
[code]std::cin.ignore() ; //丢弃单个字符 std::cin.ignore(7) ; //丢弃一定数量的字符,此处为7个 std::cin.ignore(10,'\n') ; //可选的第二个参数是告诉ignore()函数在读到什么字符时停止执行,此处为丢弃10个字符或直到它遇到一个换行符停止
如果想删除整个缓冲区而不仅限于特定数量的字符,可以使用gcount()函数,它将返回缓冲区里的字符个数
[code]std::cin.ignore(std::cin.gcount()+1) ;
对输入数据进行合法性检查
cin对象有几个专门用来报告其工作情况的成员函数,它们将返回一个真/假值来表明cin的状态:
[code]std::cin.eof():如果到达文件(或输入)的末尾,返回true std::cin.fail():如果cin无法工作,返回true std::cin.bad():如果cin因为比较严重的原因(比如内存不足)而无法工作,返回true std::cin.good():如果以上情况都没发生,返回true
如果cin为假或者cin.fail()或cin.bad()调用的返回值是true,说明有问题发生了,这类问题的基本处理步骤是:
先调用std::cin.clear()函数清除cin的出错状态,再调用std::cin.ignore()函数把缓冲区里的现有输入全部丢弃(clear()只清除出错状态,不清理输入缓冲区)
[code]int age; while(!(std::cin >> age)) { std::cin.clear(); std::cin.ignore(std::cin.gcount()+1,'\n') ; std::cout << "Please enter your age again: " ; }
CPP入门(2):操作符和控制结构
相关文章推荐
- c语言 商店购物车系统
- C++/STL
- 理解结构体
- C语言字符串与数字互转
- C++ note--常见排序算法
- C语言中结构体參数变量的传递
- 《 C语言程序设计(第2版)》 读书笔记
- c++表达式
- 黑马程序员--C语言自学笔记---09排序、查找、迷宫、字符串
- 黑马程序员--C语言自学笔记---08数组
- C++ 大规模程序设计 之 绝缘
- C++句柄解析
- C/C++语言参数传递----函数/方法 参数的指针引用传递
- C++拷贝对象
- C++拷贝对象
- c++中这些做法是不正确或者应该极力避免的
- 发现了一个C++错误查询很好的网站
- C语言学习笔记-----伊能C语言学习笔记---指针类型和指针所指向的类型不同时
- Effective C++ Item 29 为”异常安全”而努力是值得的
- C++ STL之set