[英]why getline ignoring first character of input while using in loop?
[英]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.