zoukankan      html  css  js  c++  java
  • cin,scanf后使用getline() 函数的易错点

     
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <ctime>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     string s, sum;
    10     int n;
    11     while (scanf("%d", &n) != EOF) {
    12         while (n) {
    13             getline(cin, s);
    14             sum += s;
    15             --n;
    16         }
    17         cout << sum << endl;
    18     }
    19     
    20 
    21 }

    经过调试发现编译器第一次经过getline()时什么也不做,知道第二次经过getline()时程序才会提示你让你输入s

    所以当你输入n时,实际只能再输入n - 1个字符串,改成cin >> s;即可解决这个问题

    为什么会这样?

    原因链接:https://blog.csdn.net/u011421608/article/details/44591579

    原因用户输入完年龄后按回车结束输入,把“ ”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会等待用户输入。

    解决办法:把scanf改成cin,在cin后与getline()之间写一句cin.ignore()来忽略换行符

     
  • 相关阅读:
    随便发泄几句
    四年有感
    测试产品杂谈
    质量管理杂谈
    提升
    下半年工作方向
    测试资源分配
    2013思路
    微博吐槽汇总
    招聘
  • 原文地址:https://www.cnblogs.com/theSunAndSnow/p/11736061.html
Copyright © 2011-2022 走看看