據我所知,提取操作符跳過開始處的空白,並在遇到空白或流尾時停止。 noskipws可以用來停止忽略領先的空格。noskipws對cin的影響>>
我有以下程序,我已經使用noskipws。
#include <iostream>
using namespace std;
int main()
{
char name[128];
cout<<"Enter a name ";
cin>>noskipws>>name;
cout<<"You entered "<<name<<"\n";
cout<<"Enter another name ";
cin>>name;
cout<<"You entered "<<(int)name[0]<<"\n";
return 0;
}
我的查詢是:
如果我輸入「約翰」作爲第一個輸入,那麼第二CIN >>操作不等待輸入,什麼都不復制到目標即名稱數組。我期望第二個cin >>能夠在至少一個換行符或流結束處傳遞,而不是僅僅將目標字符串設置爲空。這是爲什麼發生?
當我輸入「John Smith」作爲第一個cin >>語句的輸入時,觀察到同樣的情況。爲什麼第二個cin >>語句不會將空間或「Smith」複製到目標變量?
以下是該程序的輸出:
Enter a name John
You entered John
Enter another name You entered 0
Enter a name John Smith
You entered John
Enter another name You entered 0
謝謝!
我希望你知道你的程序可以產生緩衝很容易溢出。在生產代碼中,不應該使用'std :: cin'來寫入char數組。改用'std :: string'。 – smerlin
這是真的。以上代碼僅用於說明目的。使用cin.width或cin.getline可以避免一些溢出問題,但正如你提到的std :: string將是最好的。我給出了上面的示例代碼,只是爲了展示我想問的問題。 –