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

  • 相关阅读:
    Spark源码走读4——Scheduler
    Spark源码走读3——Job Runtime
    Spark源码走读2——Spark Submit
    Spark源码走读1——RDD
    Tachyon源码解读一:master部分
    VS2008中MFC界面编程Caption中文全是乱码的解决办法
    程序猿也爱学英语(上),有图有真相
    C++程序员必看书单
    如何将CString转换成WCHAR
    Windows 语音识别编程
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/8893847.html
Copyright © 2011-2022 走看看