zoukankan      html  css  js  c++  java
  • 关于函数getline()(简单注意事项,不懂你怼我!!!)

    关于getline()函数好使但是有毒;

    有两种操作需要进行特殊处理:

    First:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include
    <algorithm> #include <sstream> using namespace std; int n; int a[100]; int b[100],c[100]; int main() { while (cin>>n) { string s; //测试样例请用:
    // 10
    // 1 2 3 4 5
    //6 7 8 9
    string ss; string sss; getline(cin,s); //自己想想这一个存的啥;
    getline(cin,ss); //这个呢 getline(cin,sss); //还有这个。。 cout
    <<s<<endl<<ss<<endl<<sss<<endl; } return 0; }

    输出结果你蒙(应该是蒙吧,难道你知道?神犇!?)对了么??

    cin>>n;进行完毕之后有一个 ;但是 并不能存到n中,于是留在了缓冲区;

    而当s进行读入一行操作时,实际上存入的是 。

    那么你在 ss中读入1 2 3 4 5 之后的换行为什么不需要另开一个string类型存储,反而6 7 8 9可以直接存到sss中去呢??想一下;

    因为是读入一行操作, 会被存入那一行中,而不是像n一样不能存储。所以不需要重开一个,你蒙对了么(馬鹿?)

    还有另一种输入引发的另一个问题,(注意读取无用行的位置不同)

    Second:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <sstream>
    using namespace std;
    int n;
    int a[100];
    int b[100],c[100];
    int main()
    {
        string s;
        string ss;
        string buf;
        while (getline(cin,s))
        {
            int a;                //如果你还是在这里插入getline(cin,buf)而不是最后;那么第一次循环buf会取代ss读入,ss就会读下一行而不是应该读取的这一行;第二次循环时s读入不了;
            getline(cin,ss);
            cin>>a;             //这里会遗留
    ;
            getline(cin,buf);
        }
        return 0;
    }

    PS:

    这个问题为什么提出,解决什么问题呢??

    题目中若要求在一组样例中读入多行则需要注意你读入的究竟是什么东西。

  • 相关阅读:
    ASP.NET 4.0的ClientIDMode属性
    关于sql链接超时的问题
    Image.Url 无法使用 Server.MapPath(使用后无论如何也不显示)
    C# 中字符串转换成日期
    Linux RAID 磁盘管理
    脚本编写
    挂载一个NFS共享
    配置NFS服务
    配置多用户SMB挂载
    通过 SMB 共享目录
  • 原文地址:https://www.cnblogs.com/SunQi-lvbu/p/6899499.html
Copyright © 2011-2022 走看看