肚皮朝上的刺猬 2017-02-07 13:08 采纳率: 50%
浏览 2332
已采纳

C++中cin.get的一个问题

新人对缓存区还是不怎么了解,想请教一下循环中那个cin.get()读取的到底是什么?
我本来以为是getline或者cin输入完会在缓存区留下一个回车,用cin.get()把回车给读取掉。可是我后来试着把getline或者cin注释掉,并且注释掉循环中的cin.get,发现循环都能正常运行,可一旦把这两个都留着只注释掉cin.get,程序运行的就不正常了。
希望有懂的前辈指点一下,谢谢了。

#include "stdafx.h"
#include
#include
#include

const int NUM = 5;
int main()
{
using std::vector;
using std::string;
using std::cin;
using std::cout;

vector<int> ratings(NUM);
vector<string> titles(NUM);
cout << "you will do exactly as told. you willenter\n"
    << NUM << " book titles and your ratings (0-10).\n";
int i, A;
for (i = 0; i < NUM; i++)
{

    cout << "enter title #" << i + 1 << ": ";
    getline(cin, titles[i]);
    cout << "enter your rating : ";
    cin >> ratings[i];
    cin.get();//就是这个不是很懂
}
cout << "thank you. you entered the following:\n"
    << "rating\tBook\n";
for (i = 0; i < NUM; i++)
{
    cout << ratings[i] << "\t" << titles[i] << std::endl;
}

cin.get();
return 0;

}

  • 写回答

3条回答

  • la_vie_est_belle Python领域优质创作者 2017-02-13 03:47
    关注

    cin >> ratings[i]; 这句代码让你输入后,你会敲一个回车表示输入完毕。此时在输入流中会有一个换行符,而cin.get()就是用来读取这个换行符的。

    如果你只注释掉循环中的cin.get(),那输入流中的换行符就会在第二次循环时对getline()造成影响。

    如果你把这两句都去掉,当然输入流中就没有换行符了。getline()是在你输入后丢弃换行符的。
    cin >> ratings[i];
    cin.get();//就是这个不是很懂

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧