混合使用cin>>和cin.get()的问题

1、cin>>和cin.get()

如下示例代码会到导致cin.get()语句被跳过,不等用户输入数据。

char ch;   
int number; 
cout << "Enter a number: ”;
cin >> number;   // 读取整数
cout << "Enter a character: ";
ch = cin.get() ;   // 读取字符
cout << "Thank You!\n";

在示例代码段中,当执行第 4 行时,用户输入一个数字,然后按回车键。假设输入的是数字 100,按回车键会导致一个换行符('\n')存储在键盘缓冲区(就是一块内存空间)数字 100 之后。

当第 4 行中的 cin>> 语句读取用户输入的数据时,它会在遇到换行符时停止,但是此时换行字符未被读取,而是仍保留在键盘缓冲区中。从键盘读取数据的输入语句只在键盘缓冲区为空时等待用户输入值,但现在不为空!

当第 6 行中的 cin.get ()函数执行时,它开始从先前输入操作停止的键盘缓冲区读取,并发现了换行符,所以它无须等待用户输入另一个值,直接就读取了之前剩下的那个换行符,导致无效的输入,进而直接执行了下面的函数。

这种问题最直接的解决办法是使用 cin.ignore ()函数。

2、cin.ignore()

原型为:cin.ignore(n,c)

其中括号中的参数都是可选的,n是一个整数,c为一个字符。含义是让输入流cin跳跃过n个字符或者遇到字符c为止。从跳跃过这些内容之后的地方开始后面的读取。例如:

cin.ignore(20,'\n');表示cin跳过20个字符,或者直到遇到换行符,这两种情况哪一种先出现都可以,都将停止cin的跳跃。

如果cin.ignore()没有参数,表示跳过键盘缓冲区中的第一个字符。
 

char ch;   
int number; 
cout << "Enter a number: ”;
cin >> number;   // 读取整数
cin.ignore();    //忽略前面剩余的换行符,并开始下面的读取
cout << "Enter a character: ";
ch = cin.get() ;   // 读取字符
cout << "Thank You!\n";

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值