C++常用的标准输入方式

C++常用的标准输入方式

个人常用的就2种,cin>>和getline()(后面这个在头文件中),在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。

cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。

在输入这个操作来看,其实可以分为2部分来看。第一部分在键盘中输入数据到缓冲区,不管是输入了空格,回车,TAB等特殊字符。接着采用cin,getline()等函数方法等来在缓冲区采用特定的规则读取,这些特定的规则就是依据空格,TAB,回车来制定的。

1.cin>>

cin是C++中的标准输入流对象。

cin接收的数据:一个字符(char型),一个数字(int,double…),一个字符串(string ,char str[]="")// 多次只去第一个输入,多个需采用循环的方式多次输入
**停止条件:**遇到 空格 ,TAB,回车结束本次数据读入。
缓冲区是否清除:其尾部必会有一个用户再输入中敲入的空格,TAB,回车等其对应的ASCLL码被留在缓冲区中,cin>>并不会对其处理。

#include <string> 
#include <iostream>
using namespace std;

int main()
{
	int a;
	char b;
	cin >> a;
	b = cin.get();//可以读取残留在缓冲区的回车
	cout<<a<<b;
	system("pause");
	return 0;
}

输入
10[回车]
输出
10
[回车]
请按任意键退出程序…
##1.2cin>>
(1)cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。
(2)当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。
使用cin>>实现连续输入.
cin>>a>>b>>c;
cin>>a先执行后返回以cin的对象,为的是实现链式编程,当你输入a的值后,敲了一个空格或TAB或回车,当执行cin>>b是cin会忽略这个空格或TAB或回车。

2.getline()

一般使用getline()获取一长串。(有人说是一行,其实是该函数默认回车为结束符,所以是一行,其实可以指定结束符)
接收的数据:单个和多个字符串的数据。
停止条件 :1)到文件结束,2)默认一回车,可以指定结束符。3)输入达 到最大限度。
缓冲区是否清除:getline遇到结束符时,会将结束符一并读入指定的string中,再将结束符替换为空字符。因此,进行从键盘读取一行字符时,建议使用getline,较为安全。但是,最好还是要进行标准输入的安全检查,提高程序容错能力。

#include <string> 
#include <iostream>
using namespace std;

int main()
{
	string str;
	getline(cin, str);
	cout << str;
	system("pause");
	return 0;
}

在这里插入图片描述

2.2getline()指定结束符

#include <string> 
#include <iostream>
using namespace std;

int main()
{
	string str;
	getline(cin, str,'c');//cin也可是创建的文文件流对象 ifstream ifs;......get(ifs,buf);   	//string buf;
	//while (getline(ifs, buf))//行末尾返回一个-1;
	//{
	//	cout << buf << endl;
	//} 
	cout << str;
	system("pause");
	return 0;
}

在这里插入图片描述
这里c被替换成了‘\0’,因为字符串结尾就位‘\0’,但是c后面的rf还在缓冲区中。

3,cin.get(),get()

cin.get(str,size);读取一行时,只能将字符串读入C风格的字符串中,即char*,但是C++的getline函数可以将字符串读入C++风格的字符串中,即string类型。鉴于getline较cin.get()的这两种优点,建议使用getline进行行的读取

get()由于该函数是C的库函数,所以不建议使用,既然是C++程序,就尽量使用C++的库函数吧。

4 cin的循环用例

cin cout 分别是 istream和ostream类的对象,只不过他们是由标准库的开发者提前创建好的对象 称之为内置对象 <<和>>是cin和cout的内置方法,这个可以自行分析处理的数据类型,无需C中scanf和printf需要指定格式符

编译器会在需要的情况下将iostram类型自动转换为void类型。因此,在表达式while (cin >> m )中,括号中的表达式为了匹配bool类型将自动转换为void类型。如果读入时发生错误返回0,否则返回cin的地址。(while(cin>>n)表示 int n; while(1){ cin>>n;}

#include <iostream>

using namespace std;

int main(){
	int a, b;
	while(cin >> a >> b){
		cout << a + b << endl;
	}
	return 0;
}

#include <iostream>
#include <vector>
using namespace std;
 
int main(){
    int n;
    vector<int> num;
    while(cin>>n){
        num.push_back(n);
        if(cin.get()=='\n')//完美
            break;
    }
    for(int x=0;x<num.size();x++)
        cout<<num[x]<<' ';
    cout<<endl;
    return 0;
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值