zoukankan      html  css  js  c++  java
  • C++读入整行字符串的方法

     1 string s;
     2 getline(cin,s);
     3 cout<<s<<endl;
     4 
     5 
     6 char s[100];
     7 scanf("%[^
    ]%*c",s);
     8 printf("%s
    ",s);
     9 
    10 
    11 char s[100];
    12 gets(s);
    13 printf("%s
    ",s);
    14 
    15 
    16 char s[100];
    17 cin.get(s,100);
    18 printf("%s
    ",s)
    19 
    20 
    21 char s[100];
    22 cin.getline(s,100);
    23 printf("%s
    ",s);

    下面介绍cin.get()和cin.getline()的区别:

     

    可分为三种情况来看:
    1)输入的字符串不超过限定大小
    get(str,Size):读取所有字符,遇到' '时止,并且将' '留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理;
    getline(str,Size):读取所有字符,遇到' '时止,并且将' '直接从输入缓冲区中删除掉,不会影响下面的输入处理。
    2)输入的字符数超出限定的大小
            get(str,Size):读取Size-1个字符,并将str[Size-1]置为'',然后将剩余字符(包括' ')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入处理;
            getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'',剩余字符(包括' ')留在输入缓冲区中,随即设置cin实效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果象本例一样用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。
    3)输入一个空行(即直接回车)
            get(str,Size):str将得到'',并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获' ';
            getline(str,Size):str将得到'',并将' '删除掉,不置实效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。
            至于使用那个更好,可能因人习惯不同而不同,仁者见仁智者见智。对于我们编程来说,总希望能有更好的容错性,即便用户输入了不合理的输入,程序也应该能够 提示并能够重新输入或继续正常处理,而因为用户的输入问题而导致程序错误或其后的所有输入都不可用显然不是我们希望的。使用get(str,Size)和 getline(str,Size),都可能碰到设置失效位,关闭输入的情况,故都是需要考虑到相应的防错处理的。

    参考资料:https://blog.csdn.net/yo_bc/article/details/72617275

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/8893847.html
Copyright © 2011-2022 走看看