• getline在windows系统下的怪现象


    先来看一下这个函数的作用:引用一下百科里的介绍

    原型
      istream& getline ( istream &is , string &str , char delim );
      istream& getline ( istream& , string& );
    参数
      is 进行读入操作的输入流
      str 存储读入的内容
      delim 终结符
    返回值
      与参数is是一样的
    功能
      将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 '\n'(换行符)。
      函数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。
      在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入。
    

    看了这个函数我们来应用一下:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()    {
        string str;
        while(getline(cin,str)){
            cout<<str<<endl;
        }
    }

    我们知道这个Demo我们输入一个字符串元后键入回车就会输出刚才我们键入的字符串,但经过我们调试发现在windows系统下会出现一点下问题,我使用vc写刚才的Demo时

    就会出现回车两次才能输出字符串的问题。也就是回车一次不会结束输入。而当我们该一下代码:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()    {
        string str;
        while(getline(cin,str,'#')){
            cout<<str<<endl;
        }
    }

    这样我们就可以输入#结束。可以猜测这个问题跟默认的'\n'有关。

    我们知道在Windows

    '/r'  回车,回到当前行的行首,而不会换到下一行;
    '/n'  换行,换到当前位置的下一行,而不会回到行首;

    Unix系统里,每行结尾只有“<换行>”,即"/n"

     

    找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
  • 相关阅读:
    多校省选模拟33 C
    省选测试47 T2宝石(P5401 [CTS2019]珍珠) 题解
    省选测试39
    省选测试38
    省选测试37
    自嗨测试赛4
    自嗨测试赛3
    自嗨测试赛2
    自嗨测试赛1
    树状数组 学习笔记
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2709117.html
Copyright © 2020-2023  润新知