您的位置:首页 > 编程语言 > C语言/C++

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):操作符和控制结构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: