Samuel 發問時間: 電腦與網際網路程式設計 · 1 0 年前

c++的get和getline請看例題!!我有問題

#include <iostream.h>

#include <cstring>

int main()

{

int i,j;

while(1)

{

char text[80];

cout<<"請輸入字串"<<endl;

cin.getline(text,80);//如果把這個getline改成get輸出會完全重複"請輸入字串"和"字串轉換為==>"//

j=strlen(text);

cout<<"字串轉換為=>";

for(i=j-1;i>=0;i--)

cout<<text[i];

cout<<endl;

}

return 0;

}

----------------------------------------------------------------------------------------------

為什麼阿!

get和getline差在哪阿!!

3 個解答

評分
  • Lv 7
    1 0 年前
    最佳解答

    參考一下http://tw.knowledge.yahoo.com/question/?qid=120611... 10, 'a');cout << a << endl;cin.get(a, 10, 'a');cout << a << endl;cin.get(a, 10, 'a');cout << a << endl;在C++執行第一個cin.get()時我輸入"123a12a1".所以C++會先把"123a12a1"擺進讀取緩衝區內.之後在處理cin.get().第一個cin.get()會讀取"123"就停止.因"123"之後是'a'.'a'是我們設定的分隔字元(停止字元).因cin.get()會把分隔字元(停止字元)擺回讀取緩衝區內.所以當執行完第一個cin.get()之後.讀取緩衝區內有"a12a1".當C++執行第二個cin.get()時,因讀取緩衝區內有"a12a1".'a'是第一個字元.所以第二個cin.get()什麼都沒讀到.不過之後cin.get()還是會把分隔字元(停止字元)擺回讀取緩衝區內.所以執行完第二個cin.get()之後讀取緩衝區內有"a12a1".因此不管你有多少個cin.get(), 當第一個cin.get()執行完之後,其它的cin.get()都讀不到東西. 讀取緩衝區內都一定是"a12a1".你若用getline()的話那第一個cin.getline()會讀取"123"就停止.因"123"之後是'a'.'a'是我們設定的分隔字元(停止字元).因cin.getline()不會把分隔字元(停止字元)擺回讀取緩衝區內.所以當執行完第一個cin.get()之後.讀取緩衝區內有"12a1".當C++執行第二個cin.get()時,讀取緩衝區內有"12a1".所以第二個cin.get()讀到"12".之後cin.getline()不會把分隔字元(停止字元)擺回讀取緩衝區內.所以執行完第二個cin.getline()之後讀取緩衝區內有"1".第三個cin.getline()就會讀到"1".懂不懂?不懂請再問.

    2006-11-14 02:51:35 補充:

    對.

    cin.get(a,10) == cin.get(a, 10, '\n');

    getline()也是一樣

    cin.getline(a,10) == cin.getline(a, 10, '\n');

    參考資料: Myself
  • 1 0 年前

    如果cin.get(,)裡面沒有設定停止字元會以"\n"當作分隔字元是嗎?

  • cin.get()一次讀取一字元的方式來讀取字串,需跑完迴圈才完成,而cin.getline()可以一次讀取一個字串到字元陣列中

    二者的格式分別如下

    cin.get(字元變數);

    cin.getline(字串變數,讀取字元,[結束字元]) ;最後一個可選擇的數[結束字元],可以指定getline在讀取時,若遇到此結束字完就停止擷取,反之如果沒有遇到指定的結束字元,就不會停止讀取

    get和getline最大的差別在於getline會 將\n視為讀取內容,get則不會

還有問題?馬上發問,尋求解答。