C++读入整行字符串的方法

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

 

 

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

 

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

 

 

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

相关文章
相关标签/搜索