栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++中cin对象读取字符串的注意事项

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++中cin对象读取字符串的注意事项

cin是istream包的对象, 用来读取数据. 初期刚用时因为细节很多, 所以频频出错, 有了点时间总结一下. cin >> xx_1 的注意点
  • 这种形式时, cin以空格/制表符(tab)/回车(enter/return)来判断是否要结束读取
  • cin会自动忽略输入流中的空格/制表符(tab)/回车(enter/return), 以保证正常输入, 见下面的Demo解释
// ... 默认包含了iostream , std空间等细节
char xx_1[20], xx_2[20];
cin >> xx_1[20];
cin >> xx_2[20];

// 运行程序 键盘输入 test [N个空格/制表符/换行符] test
// 此时可以正常的给xx_1和xx_2赋值为test, 那N个空格/制表符/换行符会被忽略
cin.getline(xx_1, number) / cin.get(xx_1, number) 的注意点
  • 都是接受输入流的一整行, 结束读取的条件是遇到换行符or输入流的字符大于第二个参数了.
  • 遇到换行符中止读取后, 第一种将换行符从输入流中删掉.
  • 遇到换行符中止读取后, 第二种将换行符保留在输入流中.
  • 不会像cin>>那样自动忽略, 输入流有什么就读取什么
  • 最多读取number-1个字符, 第number个位置将用来设为''
// ... 默认包含了iostream , std空间等细节
char xx_1[20], xx_2[20];
cin.getline(xx_1, 20);
cin.getline(xx_2, 20);

//  运行程序, 输入test  test [换行符] test
//  会正确的将xx_1设置为test test, 将xx_2设置为test

char xx_3[20], xx_4[20];
cin.get(xx_3, 20);
cin.get(xx_4, 20);

//  运行程序, 输入test  test [换行符] test
// 出现问题了, xx_3会被正确的设置为test test, 而xx_4会被设置为[换行符]
// 这是由于cin.get()不会自动删掉输入流的换行符. 可以连缀一个get()来避免
cin.get(xx_3, 20).get();
混合使用cin >> xx 与cin.get[line](xx, number) 注意点
  • 要特别小心对换行符的处理
  • 两者对于中止读取的标识符不同
// ... 默认包含了iostream , std空间等细节
char xx_1[20], xx_2[20];
cin >> xx_1;
cin.getline(xx_2, 20);

// 运行程序, 输入 test_0[空格]test_1[换行符] test_2
// xx_1将被赋值为test_0, xx_2将被赋值为[空格]test
// 这是因为cin>>遇到空格就中止读取了, 而cin.getline也不会忽略空格, 有什么就读取什么导致的

char xx_3[20], xx_4[20];
cin.getline(xx_3, 20);
cin >> xx_4;

// 运行程序, 输入 test_0[空格]test_1[换行符] test_2
// 这次会按照意愿, xx_3被赋值为test_0[空格]test_1, xx_4被赋值为test_2

char xx_5[20], xx_6[20];
cin.get(xx_5, 20);
cin.getline(xx_6, 20)

// 运行程序, 输入 test_0[空格]test_1[换行符] test_2
// 因为get不会删掉输入流的换行符, 所以xx_6将读取换行符, 而非test_2
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232794.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号