在C++和java中輸入問題,如果我們在整數後輸入一個字符串,它將跳過它轉到下一個語句。字符串輸入 - 被忽略的第一行
string name;
int age;
cout<<"Enter age";
cin>>age;
cout<<"Enter name";
getline(cin,name);
cout<<name;
cout<<age;
getch();
上面的代碼不採取將其命名爲跳過此line.what aproblem與它...... ???
在C++和java中輸入問題,如果我們在整數後輸入一個字符串,它將跳過它轉到下一個語句。字符串輸入 - 被忽略的第一行
string name;
int age;
cout<<"Enter age";
cin>>age;
cout<<"Enter name";
getline(cin,name);
cout<<name;
cout<<age;
getch();
上面的代碼不採取將其命名爲跳過此line.what aproblem與它...... ???
當讀取整數值時,引入以完成該行的[Enter]仍在流中,並且getline(cin,name)
讀取[Enter]。
爲了解決該問題,第一flush cin before getting the string:
string name;
int age;
cout<<"Enter age";
cin>>age;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignores all enters
cout<<"Enter name";
getline(cin,name);
cout<<name;
cout<<age;
getch();
感謝xorguy爲您的幫助... –
我將回答爲僅限於C++,因爲只有C++代碼是否存在。
std::getline
將消耗前一個operator >>
留下的輸入流中的換行符,並因此返回。
一個簡單的解決辦法是使用std::getline
#include<limits>
// ....
string name;
int age;
cout<<"Enter age";
cin>>age;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout<<"Enter name";
getline(cin,name);
感謝您的幫助pow ... –
std::cin >> age;
std::getline(std::cin, name);
比方說,用戶輸入整數5.這是之前 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
忽略輸入的行中的所有剩餘字符輸入流將如下所示:
5\n ...
請注意,上述內容可能會有所不同。用戶可以輸入一個整數,然後輸入一個空格字符。兩者都是同樣有效的情況。
也就是說,用戶輸入值並點擊返回提交。 operator >>
被格式化,以便整數將被消耗,但是一旦它發現一個新行或空白提取將停止。輸入操作後,新行應仍在流中。
\n ...
現在,讓我們來看看name
內容:
\n "Bruce Wayne"\n
當getline
執行,一旦發現流中的一個新的生產線將停止尋找新的輸入。之前提取的新行仍在流中,因此輸入立即停止。沒有提取!
幸運的是,我們可以使用ignore
方法從流丟棄新行:
std::cin >> age;
std::cin.ignore(); // ignore the next character
std::getline(std::cin, age);
默認情況下,std::cin.ignore
給出0參數時會從流丟棄下一個字符。
這是live example。
感謝您的幫助... –
我沒有在這裏看到java代碼 – P0W
我希望你不只是標記java,因爲它是一個受歡迎的標籤... – Cruncher
當你有基於行的輸入時,第一個數字後面還有字符或換行符,沒有閱讀,只是因爲你要求更多的數據而沒有消失。 –