亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

C++中cin對象讀取字符串的注意事項

標簽:
C++

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个位置将用来设为'\0'
// ... 默认包含了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
點擊查看更多內容
4人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消