簡體   English   中英

Getline忽略輸入的第一個字符

[英]Getline ignoring first character of input

我剛開始使用 C++ 中的數組,但在獲取數組的第一個字符時遇到了問題。

這是我的代碼

1- 我輸入一個名字,例如“Jim”

char name[30];
cin.ignore();
cin.getline(name, 30);

2-我立即嘗試計算數組

    cout<<"NAME:"<<name; // THIS PRINTS 'im'

我確信它會打印“J”。 我究竟做錯了什么?

這是cin.ignore的簽名:

istream& ignore (streamsize n = 1, int delim = EOF);

因此,如果您在不帶任何參數的情況下調用 ignore 函數,默認情況下它會從輸入中忽略 '1' 字符。 在這種情況下,它忽略了“J”。 刪除忽略電話,你會得到“吉姆”。

只需刪除 cin.ignore();

這會忽略第一個字符,因此您會錯過 'J'。

我有這段代碼的問題是它在第一個周期后吃掉了第一個字符(第一個周期沒問題)

do{
    cout << endl << "command:> ";
    string cmdStr1="";
    cin.ignore();
    getline(cin, cmdStr1);
    cout << "cin= " << cmdStr1 << endl; //For Debuging
    //...more code here
}while(1);

輸出是:

命令:> pos

cin= pos

命令:> pos ... 從第二個循環開始刪除第一個字符

cin= os

...

如果“cin.ignore();” 被評論然后它導致了“分段錯誤”:

命令:> cin=

分段故障

對我有用的解決方案:

移動“cin.ignore();” 在 do-while 循環之前的行。

cin.ignore();

      do{
            std::cout << endl << "command:> ";
            std::string cmdStr1="";
            std::getline(std::cin, cmdStr1);
            std::cout << "cin= " << cmdStr1 << endl; //For Debuging
            //...more code here
    }while(1);

輸出是:

命令:> pos

cin= pos

命令:> pos

cin= pos

...

...

PS 把代碼放在這里真是太難了……我對繼續合作感到失望。

暫無
暫無

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

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