簡體   English   中英

C ++:Getline函數力學

[英]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的最大值在變量numnull INT字符串s 如果未達到限制,則字符串將按原樣保留在輸入流中,並由變量s獲取。

接受字符串之前嘗試使用cin.clear

暫無
暫無

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

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