C++中cin和cout中不会被注意的细节(字符串的处理)
来源:互联网 发布:网站怎么弄三级域名 编辑:程序博客网 时间:2024/06/05 01:55
cout.put(ch);
与cout << ch;类似。但是只可以输出单个字符。
cin
cin使用空白(空格,制表符和换行符)来确定字符串的结束位置。
例子:
#include <iostream>using namespace std;int main(){ char ch[20]; cin >> ch; cout << "ch = " << ch << endl;}
可以看出cin只能读取一个单词,那么如何让cin读取一行字符串呢?
这里引入两个类的成员函数:
getline(char* ch,int n);
读取一行输入,直到到达换行符。丢弃换行符。
get(char* ch,int n);
读取一行输入,直到到达换行符。将换行符保留在输入序列中。
ch是用来存储输入行的数组名称;n是要读取的字符数(读取n-1个字符,后面加‘\0’空字符)。
例子:
#include <iostream>using namespace std;int main(){ char ch[20]; cin.getline(ch,20); char sh[20]; cin.getline(sh,20); cout << "ch = " << ch << endl; cout << "sh = " << sh << endl;}
空行的问题
get()的问题
get()函数将换行符保留,那么下一个get()函数将读取空字符,而无法继续读取后面的字符了。
#include <iostream>using namespace std;int main(){ char ch[20]; cin.get(ch,20); char sh[20]; cin.get(sh,20); cout << "ch = " << ch << endl; cout << "sh = " << sh << endl;}
解决方法:
使用不带任何参数的cin.get()或者;可以读取下一个字符(即使是换行符)。
#include <iostream>using namespace std;int main(){ char ch[20]; cin.get(ch,20).get(); char sh[20]; cin.get(sh,20); cout << "ch = " << ch << endl; cout << "sh = " << sh << endl;}
PS:有参数的get函数读到了空行(只有一个换行符)后,将设置失效位(failbit)。接下来的输入将被阻断(接收到的都是空的字符串)。要用下面命令进行恢复:
cin.clear(); //恢复输入cin.get(); //吃掉换行符
getline()的问题
当输入的字符串比读取的个数长的时候,getline将设置失效位,并且关闭后面的输入。
#include <iostream>using namespace std;int main(){ char ch[20]; cin.getline(ch,4); char sh[20]; cin.getline(sh,4); cout << "ch = " << ch << endl; cout << "sh = " << sh << endl;}
cin返回值
cin.get和cin>>返回一个cin对象,所以可以连写输入。
cin.getline(ch,20).get(sh,20); //cin >> ch >> sh; //小心空格
(cin >> ch).get(sh);
下面两个结果分别对应上面前两行代码:
阅读全文
0 0
- C++中cin和cout中不会被注意的细节(字符串的处理)
- 输入输出流的细节(cin.clear,cin.sync(),cout的一些细节处理)
- C++中cout、cin和endl的用法
- C++中 cin 与 cout 的用法
- C++中cin/cout的用法
- C++中cout <<与cin >>的理解
- C语言中cin和cout高级格式化操作
- cin和cout的使用
- VS2015中cout、cin未声明的标识符错误的处理
- 【C++学习之路】VS2015中cout、cin未声明的标识符错误的处理
- eclipse C/C+ CDT中scanf、cin、 printf、cout不能debug输入输出的问题
- Object-C中需要注意的细节
- 在PAT这个oj中还是scanf和printf的耗时少于cin和cout
- VS中cout,cin不能使用的问题
- QT中进行debug输出和使用cout cin等的问题
- QT中进行debug输出和使用cout cin等的问题
- 那些你可能不会注意的C+细节
- C++中cout/cin对于空指针、字符指针的处理,及输入>>、 输出<<操作符的重载
- 对seq2seq的一些个人理解
- Application Scenarios of Edge Computing——边缘计算的应用场景
- 在vps服务器上做端口映射访问内网
- 千里之行,始于足下
- 整理了一些session与cookie的区别与联系
- C++中cin和cout中不会被注意的细节(字符串的处理)
- Android Studio安装总结
- 监控软件
- 51单片机驱动数码管(LED)时的注意事项
- 洛谷 P1600 天天爱跑步
- IntelliJ IDEA中Mybatis报Invalid bound statement (not found)错误解决办法
- codevs 1024 一塔湖图 floyd 解题报告
- 对于请求中出现参数乱码的情况的几种解决方法
- float数据在内存中是怎么存储的