CPP入门(3):输入、输出

CPP入门(3):输入、输出

获得字符串输入

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()函数

char myChar;
std::cin.get(myChar)

读入一整行输入,可以使用std::getline()函数,调用它时,需要给出输入流的名字(比如“cin” )作为第一个输入参数,用来保存输入值的变量是第二个输入参数。
我们必须保证在调用std::getline()之前缓冲区里没有任何多余的输入:比如先读取一个整数,再读取一行文本,用户可能输入27后按下回车键,在把27赋给一个整数变量后,那个回车符还留在缓冲区,这将使得下一个std::getline()调用立刻停止读取输入

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()函数

std::cin.ignore() ;            //丢弃单个字符
std::cin.ignore(7) ;           //丢弃一定数量的字符,此处为7个
std::cin.ignore(10,'\n') ;     //可选的第二个参数是告诉ignore()函数在读到什么字符时停止执行,此处为丢弃10个字符或直到它遇到一个换行符停止

如果想删除整个缓冲区而不仅限于特定数量的字符,可以使用gcount()函数,它将返回缓冲区里的字符个数

std::cin.ignore(std::cin.gcount()+1) ;

对输入数据进行合法性检查
cin对象有几个专门用来报告其工作情况的成员函数,它们将返回一个真/假值来表明cin的状态:

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()只清除出错状态,不清理输入缓冲区)

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):操作符和控制结构

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值