簡體   English   中英

C ++中的Getline和cin.ignore

[英]Getline & cin.ignore in c++

我知道我也有類似的問題,但是我檢查了很多,但沒有找到答案,所以我希望有人可以幫助我。 所以我想做的是將一些字符串存儲到數組中,但是其中一些字符串可能包含多個單詞,因此我在互聯網上搜索后發現必須使用cin.ignore()和Getline。 我使用了它們,如下面的代碼所示,但錯誤發生在第二個和第三個字符串中,其中刪除了姓[0]和地址[0]的首個字母。 那為什么呢? 謝謝

這是我的代碼:

    int size;
    cout<<"Please enter the number of entries"<<endl;
    cin>>size;
    cin.ignore();
    string* firstname=new string[size];
    string* surname=new string[size];
    string* address=new string[size];
    cout<<"First Name"<<endl;
    for (int i=0;i<size;i++)
        getline (cin, firstname[i]);
    cout<<"Surname"<<endl;
    cin.ignore();
    for (int i=0;i<size;i++)
        getline (cin, surname[i]);
    cout<<"Address"<<endl;
    cin.ignore();
    for (int i=0;i<size;i++)
        getline (cin, address[i]);
    for (int i=0;i<size;i++)
    {
        cout<<"First Name "<<firstname[i]<<endl;
        cout<<"Surname "<<surname[i]<<endl;
        cout<<"Age "<<address[i]<<endl;
    }

編輯:樣本輸入/輸出

請輸入條目數

4

名字

約翰

邁克爾

丹尼爾

拉杜

Laaksonen

芋頭

Albot

工匠

地址

拉金街123號

拉金街900號

拉金街823號

拉金街283號

**名字約翰

亞克森姓

地址拉金街23號

邁克爾的名字

芋頭

地址900 Larkin Street

丹尼爾(Daniel)

姓阿爾伯特

地址823 Larkin Street

名Radu

史密斯姓氏

地址283 Larkin Street **

粗體是程序的輸出。 查看Laaksonen中的L如何丟失以及123中的1是否丟失。

getline()讀取並舍棄定界符( reference ),僅在讀取第一個整數時才必須使用cin.ignore()

cout<<"First Name"<<endl;
for (int i=0;i<size;i++)
    getline (cin, firstname[i]);

cout<<"Surname"<<endl;
// Remove this: cin.ignore();
for (int i=0;i<size;i++)
    getline (cin, surname[i]);

cout<<"Address"<<endl;
// Remove this: cin.ignore();
for (int i=0;i<size;i++)
    getline (cin, address[i]);

也就是說,您可以避免使用標准數組,最好使用std::vector<std::string>> firstNames

一種替代方法是使用getline()讀取全部內容,然后自己解析整數(使用atoi或類似的方法),而無需完全忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM