天天看點

C++ 輸入輸出函數學習總結

寫在未了解string class之前:

cin:

接收一個輸入的一個字元或者字元串,遇“空白字元”停止(例如:空格, 回車,TAB, 回車)

cin.get(name, size):

接收一個輸入的一個字元或者字元串,遇“回車符”停止,但是接收除“回車符”之外的空白字元(例如:空格, 回車,TAB)。需要注意的是它會将“回車符”留在緩存隊列中,不能連續兩個cin.get(name, size),否則第二個cin.get(name, size)将會直接讀入第一個cin.get(name, size)留下的回車符而導緻無效。最好的方式是cin.get(name, size)之後緊跟一個cin.get(),将回車符讀取,不影響後面的cin.get(name, size)。

1. 連續兩個cin.get(name, size),有問題

    cin.get(name, ArSize);

    cin.get(dessert, Arsize); // a problem

2. 改為下面的程式則沒有問題:

    cin.get(name, ArSize); // read first line

    cin.get(); // read newline

    cin.get(dessert, Arsize); // read second line

cin.getline(name, size):

作用同cin.get(name, size),但是cin.getline(name, size)會将“回車符”摒棄,自動換成\0'。

寫在了解C++ string class之後:

1. getline(cin, str)與cin.getline(name,size)相比發現,有了class概念之後cin成了一個參數,并且沒有長度規格。

    char a[20];    ----array;

    string b;        ----class,定義一個名字為“b”的字元串;

    strlen(charr)  -----charr的長度;

    b.size()     -----字元串b的長度;

    下面引用C++ primer plus 的例子(此程式是有bug的,當輸入字元超過charr 20位長度之後,第二個getline将會無輸入、無輸出);

#include <iostream>
#include <string> // make string class available
#include <cstring> // C-style string library
int main()
{
using namespace std;
char charr[20];
string str;
cout << “Length of string in charr before input: “ << strlen(charr) << endl;
cout << “Length of string in str before input: “ << str.size() << endl;
cout << “Enter a line of text:\n”;
cin.getline(charr, 20); // indicate maximum length
cout << “You entered: “ << charr << endl;
cout << “Enter another line of text:\n”;
getline(cin, str); // cin now an argument; no length specifier
cout << “You entered: “ << str << endl;
cout << “Length of string in charr after input: “ << strlen(charr) << endl;
cout << “Length of string in str after input: “ << str.size() << endl;
return 0;
}
           

  運作結果一:輸入少于20個字元,程式運作如下:

  Length of string in charr before input: 5

  Length of string in str before input: 0

  Enter a line of text:

  ljlkjl

  You entered: ljlkjl

  Enter another line of text:

  lkjlkj

  You entered: lkjlkj

  Length of string in charr after input: 6

  Length of string in str after input: 6

  運作結果二:輸入超過20個字元,程式運作如下;

  Length of string in charr before input: 5

  Length of string in str before input: 0

  Enter a line of text:

  kjlakjdkfjlajdklafjlsdkflajdfkjaskflasjdfljalkdjkajsdfkjakd

  You entered: kjlakjdkfjlajdklafj

  Enter another line of text:         -----not able to input any char

  You entered:                               -----

  Length of string in charr after input: 19

  Length of string in str after input: 0

繼續閱讀