[英]C++ : Getline Function Mechanics
#include <iostream>
#include <string>
using namespace std;
int main()
{
int num;
cin >> num;
string s;
getline(cin, s);
cout << s << " " << num << endl;
return 0;
}
在此代碼中,如果我輸入3並按Enter鍵,則s取一個空字符串。
1)如果將第一個字符作為換行符,那么在將整數作為輸入之后是否有可能將line作為輸入?
2)如果我的輸入是4567artyu,那么它如何確定7是否必須輸入s或num?
我建議您始終閱讀用戶的完整輸入內容。 這將引起最少的混亂。
std::getline
讀取一行輸入。 std::stoi
或(更通用的) boost::lexical_cast
將輸入安全地轉換為所需的目標類型。 在這里,您會發現不好的輸入並向用戶投訴。 我認為,如果提示輸入數字,許多用戶不會希望輸入42bananas
被接受為42,然后“記住” bananas
部分。 這很可能是錯字,要求用戶更正它很高興。
對於在將整數作為輸入之后將line作為輸入,您可以考慮從流中刪除雜散的'\\ n'字符。
#include <iostream>
#include <string>
using namespace std;
int main()
{
int num;
cin >> num;
getchar();
string s;
getline(cin, s);
cout << s << " " << num << endl;
return 0;
}
這將達到目的。
對於第二個問題,它將4567
讀取為整數,它將繼續將其讀取為整數,直到達到int的限制為止;如果達到limit,則此后將不考慮任何內容。 然后它會把INT的最大值在變量num
和null
INT字符串s
。 如果未達到限制,則字符串將按原樣保留在輸入流中,並由變量s
獲取。
接受字符串之前嘗試使用cin.clear
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.