• C++
  • 关于getline函数和get函数以及为什么无法先cin再getline

  • @ 2024-8-11 16:43:35

经过我的一番实验 我得出了以下结论:

    int a;
	cin >> a;
	
	string m;
	getline(cin,m);
	
	cout << a;
	
	cout << m;
	
	return 0;

以上代码执行后 只能输入变量a 而字符串m却无法输入 我也不知道为啥 反正最后只会输出a m却不翼而飞(我试过给m赋值 但是并没有输出m 就挺诡异的)

    int a;
	cin >> a;

    printf("\n");//此处有改动
	
	string m;
	getline(cin,m);
	
	cout << a;
	
	cout << m;
	
	return 0;

我记得我上课时教的就是这个方法 但是恕我直言 这个方法屁用没有 换行是换了 但是输出与上一段代码一模一样

因此我上B站查了一下 写出了以下代码:

    int a;
	cin >> a;
	
	cin.get();//此处有改动
	
	string m;
	getline(cin,m);
	
	cout << a;
	
	cout << m;
	
	return 0;

上述代码中的cin.get()不填参数时就是起到一个\n的效果 让你输入完a后可以换行再输入m(但是在控制台里并不会有\n的效果)

说到底get函数和getline函数其实是差不多的 只不过get函数自带\n

然而这两个函数在B站上的记录有一点少 所以我目前只能把get函数当作\n getline当作cin 其他用处我还不知道 也欢迎徐聪明等老师前来补充 点评 指正

4 comments

  • @ 2024-8-12 17:23:48

    image

    👍 1
    ❤️ 1
    • @ 2024-8-11 19:59:27

      破案了 课上只说了\n 不是叫我printf("\n") 而是

      cin.ignore(numeric_limits<streamsize>::max(),'\n');
      

      这行代码好像是把缓冲池中的换行符去掉的意思 (如果要用上面代码必须调用limits库 这么长一串 感觉还不如cin.get() )

      • @ 2024-8-12 12:34:59

        另外 get除了有\n的作用还能输入char类型(好像只能输入char类型)

    • @ 2024-8-11 16:57:30

      getline函数与get函数都是在iostream库里的 可以放心使用

      • @ 2024-8-11 16:55:32

        希望能对语言三的同学们有一定帮助

        • 1