cin<<, cin.get,cin.getline等函数深入分析

cin.get()等函数的详细用法总结 立即下载

 

http://www.cctry.com/thread-7123-1-1.html

 http://apps.hi.baidu.com/share/detail/16742364

 

谁能看出下面程序的问题   如果不能那就看完此篇文章吧
#include <iostream>
#include <vector>

using namespace std;

int main()
{
int val1;
double val2;
vector<int> vec;

cout << "Enter vector" << endl;
while (cin>>val1) {
       
       
vec.push_back(val1);
}
//cin.clear();
cout << "Enter val2" << endl;
cin >> val2;

return 0;
}


事先声明,这个帖子不是我写的,不过,这点知识我觉得比较重要,转来了 呵呵
大家可以配合这个帖子学习一下这方面
这是我搜集的相关的输入流异常处理知识(感兴趣的友友可以看看哈) :
很多初学者都认为cin函数是一个很简单的函数,其实不然!
cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(), cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:
程序1:#include <iostream>
using namespace std;
int main()
{    int m, n;   
       cin>>m;
      cin>>n;
   return 0;
}
测试情况:如果用户每次都输入两个合法的数,程序不会出问题!但是如果用户第一次输入时给一个非法的输入,比如说输入一个字符'a',你会发现程序不会再执行第二条输入语句。似乎有点奇怪!!
程序2:
#include <iostream>
using namespace std;
int main()
{  
    char str[8];   
   cin.getline(str, 5);   
cout<<str<<endl;   
cin.getline(str, 5);   
cout<<str<<endl;
    return 0;
}
程序的功能很简单,就是输入一个字符串再输出,再次输入一个字符串输出。程序执行情况:测试一:abcd (回车)abcd (输出)efgh (回车)efgh (输出)当用户第一次输入的字符串字符数小于4时,程序执行正常!测试二:abcdefgh (回车)abcd (输出)     (输出-换行)当用户第一次输入的字符数字符数大于4时,第一个字符串接受输入的前四个字符,而第二次的输入操作没有执行,第二个字符串输出为空。似乎也很奇怪!!!
其实在很多时候都会遇到诸如此类的问题,如果不熟悉程序输入的原理和cin等一些函数的原理就不知道怎么解决!我在这里做一个简单的介绍,也许介绍得不是很准确和全面,或者存在一些误解,请大家包涵!
输入操作的原理与前一节中提到的scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!
cin的一些输入函数和操作符cin is a extern istream object。提供了很多可用的成员函数和重载的操作符,如:cin<<, cin.get(), cin.getline()等。
下面我们来了解一下这几个函数:
一. cin<<该操作符是根据后面变量的类型读取数据。输入结束条件 :遇到Enter、Space、Tab键。(这个很重要!)对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
读字符的情况:
程序3:
#include <iostream>
using namespace std;
int main()
{   
char c1, c2;
cin>>c1;   
   cin>>c2;
cout<<c1<<" "<<c2<<endl;   
   return 0;
}
测试一输入:a[Enter]b[Enter]输出:a b测试二输入:a b[Enter]输出:a b
读字符串的情况:
程序4:#include <iostream>
using namespace std;i
nt main()
{   
char str1[10], str2[10];
cin>>str1;   
cin>>str2;
cout<<str1<<endl;  
    cout<<str2<<endl;
return 0;
}
测试一输入:abcd[Enter]efgh[Enter]输出:abcdefgh【分析】输入遇到回车符结束,很正常。测试二输入:abcd efgh输出:abcdefgh【分析】第一次读取字符串时遇到空格则停止了,将abcd读入str1,并舍弃了空格,将后面的字符串给了第二个字符串。这证明了cin读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据室,读入操作直接从缓冲区中取数据。
二.cin.get()该函数有三种格式:无参,一参数,二参数即cin.get(), cin.get(char ch), cin.get(array_name, Arsize)读取字符的情况:输入结束条件:Enter键对结束符处理:不丢弃缓冲区中的Entercin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的,即:ch=cin.get() 与 cin.get(ch)是等价的。
程序5:#include <iostream>
using namespace std;
int main()
{   
char c1, c2;   
cin.get(c1);
cin.get(c2);
cout<<c1<<" "<<c2<<endl; // 打印两个字符   
   cout<<(int)c1<<" "<<(int)c2<<endl; // 打印这两个字符的ASCII值
return 0;
}
测试一输入:a[Enter]输出:a97 10【分析】会发现只执行了一次从键盘输入,显然第一个字符变量取的'a', 第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符!测试二输入:a b[Enter]输出:a 97 32【分析】显然第一个字符变量取的'a', 第二个变量取的是Space(ASCII值为32)。原因同上,没有丢弃Space字符。读取字符串的情况:cin.get(array_name, Arsize)是用来读取字符串的,可以接受空格字符,遇到Enter结束输入,按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。
程序6:#include <iostream>
using namespace std;
int main ()
{
char a[20];
cin.get(a, 10);
cout<<a<<endl;
return 0;
}
测试一输入:abc def[Enter]输出:abc def【分析】说明该函数输入字符串时可以接受空格。测试二输入:1234567890[Enter]输出:123456789【分析】输入超长,则按需要的长度取数据。
程序7:#include <iostream>
using namespace std;
int main ()
{
char ch, a[20];
cin.get(a, 5);
cin>>ch;
cout<<a<<endl;
cout<<(int)ch<<endl;
return 0;
}
测试一输入:12345[Enter]输出:123453【分析】第一次输入超长,字符串按长度取了"1234",而'5'仍残留在缓冲区中,所以第二次输入字符没有从键盘读入,而是直接取了'5',所以打印的ASCII值是53('5'的ASCII值)。测试二输入:1234[Enter]a[Enter]输出:123497【分析】第二次输入有效,说明该函数把第一次输入后的Enter丢弃了!
三.cin.getline()cin.getline() 与 cin.get(array_name, Arsize)的读取方式差不多,以Enter结束,可以接受空格字符。按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。但是这两个函数是有区别的:cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。(具体原因将在下一部分"cin的错误处理"中详细介绍)
程序8:#include <iostream>
using namespace std;
int main ()
{
char ch, a[20];
cin.getline(a, 5);
cin>>ch;cout<<a<<endl;
cout<<(int)ch<<endl;
return 0;
}
测试输入:12345[Enter]输出:1234-52【分析】与cin.get(array_name, Arsize)的例程比较会发现,这里的ch并没有读取缓冲区中的5,而是返回了-52,这里其实cin>>ch语句没有执行,是因为cin出错了!下一部分将详细介绍。

在前一节中我们有几个例子中提到了cin函数出错,以致不再执行读操作(程序8)。而且我们经常会看到程序中会出现cin.clear(),cin.ignore(), cin.fail()等函数。这些函数都是与cin的错误处理有关的。这一节我们来分析一下cin的错误处理机制,并且学习几个重要的函数:cin.fail(), cin.bad(), cin.good(), cin.clear(), cin.ignore()等。


程序执行时有一个标志变量来标志输入的异常状态,其中有三位标志位分别用来标志三种异常信息,他们分别是:failbit,eofbit,badbit。这三个标志位在标志变量中是这样分配的:
____________________________________
|     2     |     1 |     0     |
| failbit | eofbit | badbit |
|___________|__________|___________|
看一下这几个标志位的作用(引用msdn):
badbit, to record a loss of integrity of the stream buffer.
eofbit, to record end-of-file while extracting from a stream.
failbit, to record a failure to extract a valid field from a stream.
In addition, a useful value is goodbit, where no bits are set.

接下来我么看几个ios类的数据定义(引用msdn):
typedef T2 iostate;
static const iostate badbit, eofbit, failbit, goodbit;

这里ios类定义了这四个常量badbit, eofbit, failbit, goodbit,其实这四个标志常量就是取对应标志位的掩码,也即输入的四种异常情况!
以上四个常量对应的取值为:
ios::badbit 001 输入(输出)流出现致命错误,不可挽回
ios::eofbit 010 已经到达文件尾
ios::failbit 100 输入(输出)流出现非致命错误,可挽回
ios::goodbit 000 流状态完全正常, 各异常标志位都为0

我们可以用输出语句来验证这几个常量的值:
cout << ios:: failbit << endl;
cout << ios:: eofbit << endl;
cout << ios:: badbit << endl;
cout << ios:: goodbit << endl;
输出的结果为:
4
2
1
0
【注意】它们不是failbit、badbit、eofbit、goodbit这四个标记位的存贮变量,而是四个标志四种异常状态的常量,其实他们就相当于取对应状态标志位的掩码。如果标志变量为flag,则flag & failbit 就取得fail标志位。


搞清楚了标志位的原理后,我们来看几个关于异常标志的函数:

1、iostate ios::rdstate()
取标志变量的值,我们可以用该函数取得整个标志变量的值,再与前面定义的标志位常量相与就可以获得对应标志位的状态。如:
void TestFlags( ios& x ) // 获得x流的三个标志位状态
{
cout << ( x.rdstate( ) & ios::badbit ) << endl;
cout << ( x.rdstate( ) & ios::failbit ) << endl;
cout << ( x.rdstate( ) & ios::eofbit ) << endl;
cout << endl;
}

2、bool ios::fail() const;
1 or true if rdstate & failbit is nonzero, otherwise 0 or false. (引用msdn)
其中rdstate即通过rdstate()取得的标识变量的值,与failbit相与,即取得failbit标志位的值,如果结果非零则放回true,否则返回false。即该函数返回failbit的状态,将标志位状态通过bool值返回。

3、bool ios::bad() const;
1 or true if rdstate & badbit is nonzero; otherwise 0. (引用msdn)
与fail()相似。

4、bool ios::good() const;
1 or true if rdstate == goodbit (no state flags are set), otherwise, 0 or false. (引用msdn)
改函数取goodbit的情况,即三个标志位都0(即没有任何异常情况)时返回true,否则返回false。

5、void ios::clear(iostate _State=goodbit);
该函数用来重置标识变量,_State是用来重置的值,默认为goodbit,即默认时将所有标志位清零。用户也可以传进参数,如:clear(failbit),这样就将标识变量置为failbit(即:001)。
我们一般是用它的默认值,当cin出现异常,我们用该函数将所有标志位重置。如果cin出现异常,没有重置标志的话没法执行下一次的cin操作。如上一节的程序2的测试二为什么第二次输入操作没有执行?程序8中 cin>>ch 为什么没有执行?都是这个原因!!!
所以经常在程序中使用 cin.clear(), 为了重置错误标志!

6、另外还有一个函数 void ios::setstate(iostate _State);
这个函数也是用来设置标识变量的,但与clear()不同。clear()是将所有标志清零,在置以参数新的标志。而该函数不清零其他的标志,而只是将参数对应的标志位置位。这个函数不是经常使用,这里不再赘述。


在搞清楚了这几个函数后,对cin输入操作的错误处理就有了比较深的了解了。下面我们回过头来看看上一节程序8的测试,因为第一次用getline()读取字符串超长,所以导致出现异常,大家可以查看一下标志位来验证一下!所以会导致后面的 cin>>ch 语句没有执行。那我们利用前面学习的clear()函数来强制重置错误标志,看看会出现什么情况呢?
程序9:
#include <iostream>
using namespace std;
int main ()
{
char ch, str[20];
cin.getline(str, 5);
cout<<"flag1:"<<cin.good()<<endl; // 查看goodbit状态,即是否有异常
cin.clear();                      // 清除错误标志
cout<<"flag1:"<<cin.good()<<endl; // 清除标志后再查看异常状态
cin>>ch;
cout<<"str:"<<str<<endl;
cout<<"ch :"<<ch<<endl;
return 0;
}
测试输入:
12345[Enter]
输出:
flag1:0 // good()返回false说明有异常
flag2:1 // good()返回true说明,clear()已经清除了错误标志
str:1234
ch :5
【分析】程序执行结束还是只执行了一次读操作,cin>>ch还是没有从键盘读取数据,但是与程序8中不同,这里打印了ch的值为'5',而且在cin>>ch之前已经清楚了错误标志,也就是cin>>ch的读操作实际上执行了。这就是前面讲的cin读取数据的原理:它是直接从输入缓冲区中取数据的。此例中,第一次输入"12345", 而getline(str, 5)根据参数'5'只取缓冲区中的前4个字符,所以str取的是"1234",而字符'5'仍在缓冲区中,所以cin>>ch直接从缓冲区中取得数据,没有从键盘读取数据!
也就是当前一次读取数据出错后,如果缓冲区没有清空的话,重置错误标志还不够!要是能将缓冲区的残留数据清空了就好了哦!下面我们再来看一个很重要的函数!

7、basic_istream& ignore(streamsize _Count = 1, int_type _Delim = traits_type::eof());
function: Causes a number of elements to be skipped from the current read position.
Parameters:
_Count, The number of elements to skip from the current read position.
_Delim, The element that, if encountered before count, causes ignore to return and allowing all elements after _Delim to be read. (引用msdn)
这个函数用来丢弃输入缓冲区中的字符,第一参数定义一个数,第二个参数定义一个字符变量。下面解释一下函数是怎样执行的:函数不停的从缓冲区中取一个字符,并判断是不是_Delim,如果不是则丢弃并进行计数,当计数达到_Count退出,如果是则丢弃字符退出。例:cin.ignore(5, 'a'); 函数将不断从缓冲区中取一个字符丢弃,直到丢弃的字符数达到5或者读取的字符为'a'。下面我们看个程序例子:
程序10:
#include <iostream>
using namespace std;
int main ()
{
cin.ignore(5, 'a');
return 0;
}
测试一输入:
c[enter]
c[enter]
c[enter]
c[enter]
c[enter]
程序结束。
【分析】程序开始时缓冲区是空的,cin.ignore()到缓冲区中取数据,没有则请求从键盘输入,每次从键盘输入一个字符,如果不是'a'则丢弃,所以该测试中共输入了5次,直到计数达到5。

测试二输入:
c[enter]
c[enter]
a[enter]
程序结束。
【分析】前面两个字符不是'a'丢弃且计数没达到5,第三次输入为'a', 丢弃该字符程序结束!


丢弃一个字符:
我们看看这个函数的默认值,第一个参数默认为1,第二个参数默认为EOF。所以cin.ignore()就是丢弃缓冲区中的第一个字符,这在程序中也是比较常用的!我们回过头看看程序5,程序5中用cin.get()读取字符,第一次读取时用回车符结束,而get函数不丢弃回车符,所以回车符仍残留在缓冲区中,导致第二次读取数据直接从缓冲区中取得回车符!这与我们最初的用以是不相符的,既然cin.get()不会自动丢弃输入结束时的回车符,这里我们学会了ignore()函数,我们就可以自己手动求其回车符啊!所以程序5可以这样改动:
程序11:
#include <iostream>
using namespace std;
int main()
{
char c1, c2;
cin.get(c1);
       cin.ignore(); // 用该函数的默认情况,丢弃一个字符,即上次输入结束的回车符
cin.get(c2);
cout<<c1<<" "<<c2<<endl; // 打印两个字符
cout<<(int)c1<<" "<<(int)c2<<endl; // 打印这两个字符的ASCII值
return 0;
}
测试一输入:
a[Enter]
b[Enter]
输出:
a
b
97 98
【分析】这样程序就正常了!

 

 

RK3568平台开发系列讲解(中断及异常篇)中断下半部:中断线程化 以前用 work 来线程化地处理中断,一个 worker 线程只能由一个 CPU 执行, 多个中断的 work 都由同一个 worker 线程来处理,在单 CPU 系统中也只能忍着 了。少数中断不能线程化,典型的例子是时钟中断,有些流氓进程不主动让出处理器,内核只能依靠周期性的时钟中断夺回处理器的控制权,时钟中断是调度器的脉搏。中断处理线程是优先级为50、调度策略是SCHED_FIFO的实时内核线程,名称是“irq/”后面跟着Linux中断号,线程处理函数是。,说明是线程化的中断,那么唤醒中断处理线程。 阅读详情

相关推荐

KEPServer EX6的Modbus、MQTT和REST Server一站式配置整理说明

KEPServer EX6的Modbus、MQTT和REST Server一站式配置整理说明

syqenter的专栏 8961

c++:cin的用法

总结: 每次使用 cin>> 都会从输入缓存区读取数据,读取的方式为第一个不包含空字符(空格或tab)到下一个空字符之前的字符。 输入数据缓存区为字符组成,包括空格字符和回车(只能在末尾), 从第一个非空字符(也就是除去开头的空格,tab,回车)开始保存。 如果当前 cin>> 在输入数据缓存区不能获得有效的数据,则创建新的缓存区。 缓存区的结尾为回车。 ...

qq_39351946的博客 855

MacBook 上 LaTeX 环境搭建:从 Mactex 到 Sublime Text 与 Skim 的保姆级配置流程

本文详细介绍了在MacBook上搭建LaTeX环境的完整流程,从Mactex安装到Sublime Text与Skim的配置优化。涵盖基础环境准备、编辑器设置、PDF预览同步等关键步骤,帮助用户快速建立高效的LaTeX工作流,特别适合学术写作和技术文档创作。

weixin_30824599的博客 680

C++--cin与cout,<<与>>

cin与cout介绍

学无止境 1084

差分运放电路输出电压偏置设计解析

差分运算放大电路是信号处理中的基础模块,通过差分对管结构实现共模抑制与差模放大。其核心原理基于运放的虚短虚断特性,当电阻网络满足对称条件时,输出电压与输入差分成正比。在工业测量系统中,由于ADC通常仅支持正电压输入,需要通过偏置电路将双极性信号平移至正电压范围。典型设计采用精密基准电压源和匹配电阻网络,既保持信号完整性又满足系统接口要求。本文以-100V高压测量为例,详细解析了分压网络设计、参考电压选取以及电阻匹配等关键技术要点,为传感器接口电路设计提供实践参考。

weixin_35750747的博客 470

Skiplist,B,B+tree,LSM tree

SkipList 理解(如何实现): 即使是有序的链表,查找的时间复杂度也是O(n),但链表不能随机访问所以不适用于二分查找,使得查找的时间复杂度为O(logn)。 于是将有序链表和二分查找结合得到了SkipList,类似于二叉搜索树,这是一种以空间换时间的算法,通过在每个节点中增加向前的指针,从而提升查找效率(如下图所示)。 一开始如a所示,是一个有序的链表,时间复杂度O(n)。随后建立了e所示的SkipList,从最顶层往下查找,可以跳过许多元素,减少查找次数。 ​

weixin_45875458的博客 947

cin<<、cin.get()、getline()(个人简单整理)黄刚的博客

cin<<, cin.get,cin.getline等函数深入分析 很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(),cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多

st_hunter的博客 504

基于C#的ASP.NET开发的党史学习网站课设

开展党史学习教育,就是要以史为镜、以史明志,把苦难辉煌的过去、日新月异的现在、光明宏大的未来贯通起来,在鉴往知来中砥砺前行,在乱云飞渡中把准航向,在凝心聚力中团结奋斗,共同创造新的历史伟业。登陆按钮与数据库进行连接,逻辑实现是如图3.1.3所示,自己定义一个SQL查询语句,将账号、密码放入SQL查询语句中,用sqlDataReader.HasRows语句进行逐一比较,找出结果,将用户名存入session并调用cookies,如果结果存在就关闭数据库,进行数据跳转,并弹出登陆成功的提示框,并关闭数据库。

m0_62408555的博客 974

C++ cout 与cin的用法

原因是他输出c地址的字符串,输出d地址的字符串,但是d是个字符它会在d的地址一直往后输出知道输出\0,所以字符g后的内容是不能确定的。count<<(char *)c<<endl与输出cout<<&c<<endl的地址是一样的,前者c+1表示下一个元素位置,&c+1表示数组末尾+1。在上面的对比我们可以看出C语言的的输出方式需要%来指定格式的,但是C++中是不要的指定的。注意 :因为cout不指定输出的格式就导致了它输出char *类型时输出的是该地址的字符串。cout<<"输出的内容"

m0_51571900的博客 5623

中兴OLT配置实战:从零开始,手把手教你完成一个HGU的完整业务开通(含DBA模板、限速与远程升级)

本文详细介绍了中兴OLT配置实战,从零开始手把手教你完成HGU的完整业务开通,包括DBA模板设计、限速与远程升级等关键步骤。通过实际案例和详细命令,帮助工程师快速掌握GPON网络配置技巧,提升运维效率。

weixin_30599769的博客 348

【CC精品教程】iTwin capture倾斜摄影建模完整操作流程

【CC精品教程】iTwin capture倾斜摄影建模完整操作流程。包括:无人机航测外业作业流程(像控点布设、航线规划、仿地飞行、航拍)和内业数据处理软件(Pix4d、CC、EPS、PhotoScan、Globalmapper)像控点权重调配、空三加密、DOM、DSM、DEM,DLG生成、等高线生成、高程点提取,点云分类过滤分割、点云生成DEM、三维模型生成等。

智慧空间实验室 3959

C++中cin、cin.get()、cin.getline()、getline()、gets()函数的用法

cin、cin.get()、cin.getline()、getline()、gets()等输入函数拨打

liujun213的专栏 505

《Zephyr OS 入门与实战》第15章:LoRaWAN 集成

【代码】《Zephyr OS 入门与实战》第15章:LoRaWAN 集成。

2301_79143213的博客 608

cin、cin.get()、cin.getline()、getline()、gets()

cin、cin.get()、cin.getline()、getline()、gets()等函数的用法 学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息; 1、cin 1、cin.get() 2、cin.getline() 3、getline

xuange125的专栏 429

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

cin<<,cin.get(),cin.getline()等区别与联系

以下是几个简单的例子: 程序1:  #include       using namespace std;      int main() {                            int m, n;                             cin>>m;                         cin>>n;

横刀立马一石头 1079

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C/C++学习笔记2 - cin深入分析(上) - cin输入操作处理(原创)

 cin很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(), cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:

lewsn2008的博客 6291

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c++ cin的使用说明

文章目录1.cin<<2.cin.get()3. cin.getline4. cin.ignore cin是C++编程语言中的标准输入流对象,即istream类的对象。 在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中...

得克特 408

C++ 输入函数 cin>>、cin.getline()和cin.get()区别

在字符串输入中,常用到cin,cin.getline()和cin.get()函数。 cin>>通常只能读取一个单词。cin.getline()和cin.get()可以读取固定长度的字符串,含空格等符号。 一、使用cin函数 由于cin通过空格、制表符、换行符来界定字符串的。故cin在获取字符时只读取一个单词长度,对于有空格的字符串其空格后面字符读不了。 例如:读取姓名 #incl

zz460833359的博客 419

c++中 cin中的hello world 也有需要注意的事情

因为cin.get读取一行的时候,是不读取换行符的,所以当我们输入一行按下回车时,读取了内容后,将换行符还留在输入队列中,导致后续的读取都会遇到换行符,就认为已经输入完成了,所以直接跳过了等待用户输入的过程。当我们发现其实还有cin.get()的时候,原来这个问题有答案,cin.get是面向行输入,那我们上面的例子就能解决了,于是我们继续做示例,看看下面这个吧。整个交互过程根本没有给我第二次输入姓名的机会,这是为什么呢,只能打开书看一下了,发现这里面涉及到一些字符串的知识和标注输入输出的知识。

iml6yu的博客 503

cin对象的一些常用方法使用总结

>> 最初定义的是右移,当但是出现在 cin >>中的时候这个符号被重载了,变成了一个流操作,在用户通过键盘输入信息的时候,所有内容都会先直接存储在一个叫输入缓冲区的的地方,cin >> 就会直接像从输入缓冲区中直接读取按照你所提供的要求的类型的数据。 cin.peek(); 这个方法是取得输入流中的第一个字符进行其他操作如比较,但是不影响输入流中...

aozhuorong6621的博客 401

C++ cin详解

cin (C++ 中的标准输入流) cin是一个C语言函数。 C++编程语言互换流中的标准输入流,需要iostream.h支持,即开始的时候,要有#include (新版本编译器为#include )读为 “see in”,音标 “/si:ɪn/”。 cin代表标准输入设备,使用提取运算符 “>>” 从设备键盘取得数据,送到输入流对象cin中,然后送到内存。使用cin可以获得多个从键盘的输入值,其具体使用格式如下: cin >> 表达式1 >>表达式2…>>

qq_56187979的博客 1万+

一个cin<< 与 cin.get()混用带来的问题

文章目录原题我的代码示例代码问题描述分析 记录一次编程过程中遇到的cin<<和cin.get()的问题 9月24日在《C++ Primer Plus 6th Edition》第四章的课后练习题中,第一道练习题编程过程中遇到了问题。 原题 编写一个C++程序,如下述输出示例所示的那样请求并显示信息: 注意,该程序应该接受的名字包含多个单词。另外,程序将向下调整成绩,即向上调一个字母。假设用户请求A、B或C,所以不必担心D和F之间的空档。 我的代码 struct inflatable{

张子轩的博客 692

C++输入与输出—cout和cin的用法

输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。 C++的输出和输入是用“流”(stream)的方式实现的。图3.2和图3.3表示C++通过流进行输入输出的过程。 有关流对象cin、cout和流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用

zhanghaotian2011的专栏 14万+
上一篇: 关于while(cin>>str)无法结束的问题
下一篇: 标准C++中的string类的用法总结
sergery
博客等级 码龄18年 113粉丝 136原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值