cin cin.get() cin.getline() 2017年7月2日学习记录
2017-07-02 19:23
190 查看
时间:2017年7月2日
1.
2.
cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在读取有多个单词组成的句子时,往往只读取第一个空白前的单词就停止读取,并在读取的单词后添加空字符。
为了解决这个问题,istream中的类(如cin)提供了一些面向行的类成员函数,getline()和get()。着两个函数都能读取一行的输入,直到到达换行符。
但是,getline()将丢弃换行符,而get()将换行符保留在输入序列中。
示例代码:1.1
运行结果:
将函数前后调换
运行结果
可以看到当用get()函数作为第一次读取函数时,函数读取了“asd asd”,而程序运行到使用getline()时,直接跳过了用户输入,打印了换行符。因为get()函数只读取到换行符就停止读取,并将换行符继续留在输入队列中,程序运行到getline()时,因为换行符继续留在输入队列中,所以getline()先读取换行符,而换行符作为getline()结束的标志,使得用户就无法继续输入。
而第一次使用getline()时,函数一样读取了“asd ads”,并以换行符作为结束,但getline()丢弃了换行符,这样就当程序运行到get()时,用户就能继续输入。
解决办法
我们可以同个连续调用两次get()函数,使用户能继续输入
总结:
在C++ Primer Plus (第六版) p-81页中指出,get()使输入更仔细。例如,假设用get()将一行读入数组中。如何知道停止读取的原因使犹豫已经读取了整行,而不是由于数组已经填满呢?答案是查看下一个输入字符(get()将换行符保留在输入队列中),如果使换行符,说明已读取了整行;否则,说明该行中还有其他输入。在第17章将介绍这种技术。总之,getline()使用起来简单一些,但get()使得检查错误更简单些。
可以用其中的任何一个来读取一行输入;只是应该知道,它们的行为稍有不同。
C++ Primer Plus (第六版)
1.
#include <iostream> #include <cstring> sizeof(name);//用于计算整个数组的长度 strlen(name);//返回的是储存在数组中的字符串的长度,而不是数组半身的长度。
2.
cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在读取有多个单词组成的句子时,往往只读取第一个空白前的单词就停止读取,并在读取的单词后添加空字符。
为了解决这个问题,istream中的类(如cin)提供了一些面向行的类成员函数,getline()和get()。着两个函数都能读取一行的输入,直到到达换行符。
但是,getline()将丢弃换行符,而get()将换行符保留在输入序列中。
示例代码:1.1
#include <iostream> #include <cstring> using namespace std; int main() { char namea[20]; char nameb[20]; cout<<"此次输入将用get()函数读取。"<<endl; cin.get(nameb,20); cout<<nameb<<endl; cout<<"此次输入将用getline()函数读取。"<<endl; cin.getline(namea,20); cout<<namea<<endl; return 0; }
运行结果:
将函数前后调换
#include <iostream> #include <cstring> using namespace std; int main() { char namea[20]; char nameb[20]; cout<<"此次输入将用getline()函数读取。"<<endl; cin.getline(namea,20); cout<<namea<<endl; cout<<"此次输入将用get()函数读取。"<<endl; cin.get(nameb,20); cout<<nameb<<endl; return 0; }
运行结果
可以看到当用get()函数作为第一次读取函数时,函数读取了“asd asd”,而程序运行到使用getline()时,直接跳过了用户输入,打印了换行符。因为get()函数只读取到换行符就停止读取,并将换行符继续留在输入队列中,程序运行到getline()时,因为换行符继续留在输入队列中,所以getline()先读取换行符,而换行符作为getline()结束的标志,使得用户就无法继续输入。
而第一次使用getline()时,函数一样读取了“asd ads”,并以换行符作为结束,但getline()丢弃了换行符,这样就当程序运行到get()时,用户就能继续输入。
解决办法
我们可以同个连续调用两次get()函数,使用户能继续输入
cout<<"此次输入将用get()函数读取。"<<endl; cin.get(nameb,20).get(); cout<<nameb<<endl;
总结:
在C++ Primer Plus (第六版) p-81页中指出,get()使输入更仔细。例如,假设用get()将一行读入数组中。如何知道停止读取的原因使犹豫已经读取了整行,而不是由于数组已经填满呢?答案是查看下一个输入字符(get()将换行符保留在输入队列中),如果使换行符,说明已读取了整行;否则,说明该行中还有其他输入。在第17章将介绍这种技术。总之,getline()使用起来简单一些,但get()使得检查错误更简单些。
可以用其中的任何一个来读取一行输入;只是应该知道,它们的行为稍有不同。
C++ Primer Plus (第六版)
相关文章推荐
- C++学习记录7--cin,cin.get(),cin.getline()的用法
- cin.getline()的学习心得(Xcode下)
- C/C++学习笔记1 - 深入了解scanf()/getchar(cin、cin.get()、cin.getline()、getline()、gets()、getchar()的区别 (OJ时候会用到)
- cin,cin.get()和cin.getline()的学习
- C++学习笔记(二十七)cin.getline()、getline()的用法
- cin学习--------cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- cin.get和cin.getline的区别?
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- cin、cin.get()、cin.getline()、getline()等用法
- cin、cin.get()、cin.getline()、getline()、gets()函数的用法
- cin.get和cin.getline的区别?
- getline和cin.getline的区别!
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- (转)cin cin.get cin.getline cin
- (转)cin cin.get cin.getline
- VC问题:cin.get和cin.getline的区别?
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法