get() 和 getline() 函数以及cin

在这里插入图片描述
方法**get(char&) 和 get(void)提供不跳过空白的单字符输入功能
函数
get(char*,int,char) 和 getline(char*,int,char)**在默认情况下读取整行而不是一个单词。
他们都是读取字符输入,而不会跳过空白,也不进行数据转化。
在使用char参数或没有参数的情况下,get()方法读取下一个输入字符,即使该字符是空格、制表符或换行符

使用get(ch)

int ct = 0;
char = 0;
cin.get(ch);
while(ch!='\n')
{
   cout << ch;
   ct++;
   cin.get(ch);
}
cout << ct << endl;

接下来,假设提供了如下输入:
I C++ Clearly.
按下回车键后,这行输入将被发送给程序。上述程序片段将首先读取字符 I ,使用 cout 显示它,并将ct递增到1.接着,它读取 I 后面的空格字符,显示它,并将ct递增到2.这一过程将一直继续下去,直到程序将回车键作为换行符处理,并终止循环。这里的重点是,通过使用get(ch),代码读取、显示并考虑空格和可打印字符。

假设程序使用>>

int ct = 0;
char = 0;
cin >> ch;
while(ch!='\n')
{
   cout << ch;
   ct++;
   cin.get(ch);
}
cout << ct << endl;

则代码将首先跳过空格,这样将不考虑空格,因此输出为
IC++ Clearly
更糟糕的是,循环不会终止。由于抽取运算符跳过了换行符,因此代码不会将换行符赋给ch,所以while循环测试将不会停止循环。

怎么选择>> ,get(char &), 或者get(void)。首先应该确定是否希望跳过空白,如果跳过空白更方便,则使用抽取运算符 >>

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

总结

1.cin>> 对缓冲区中的第一个换行符视而不见,采取的措施是忽略清除
2.cin.get() 从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取
3.cin.get(array,20);读取一行时,遇到换行符时结束读取,但是不对换行符进行处理,换行符仍然残留在输入缓冲区
4.getline读取一行字符时,默认遇到’\n’时终止,并且将’\n’直接从输入缓冲区中删除掉,不会影响下面的输入处理。
*5.cin.get(str,size);读取一行时,只能将字符串读入C风格的字符串中,即char,但是C++的getline函数可以将字符串读入C++风格的字符串中,即string类型。鉴于getline较cin.get()的这两种优点,建议使用getline进行行的读取。
6.到达文件尾后,cin.get(void)都将会返回值EOF–头文件iostream提供的一个符号常量。
7.char类型的输入字符是一个个的读,以空格、tab 或换行作为分隔符,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>> 会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>> 不做处理。
若是char数组类型的输入字符则是一个单词一个单词的读,以空格、tab 或换行作为分隔符。

补充

char c1;
cin.get(c1).get();

get(void)的返回类型为int
上述代码将读取第一个输入字符,将其赋给c1,然后读取并丢弃第二个输入字符。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值