新聞中心
getline()函數(shù)是一個相當常見的工具,用于從輸入流中獲取一行數(shù)據(jù)。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名申請、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、新城網(wǎng)站維護、網(wǎng)站推廣。
下面我們將詳細說明C++中的getline()函數(shù)用法,以及在使用getline()函數(shù)作為while循環(huán)條件時需要注意的問題:
在C++中,getline函數(shù)本質上有兩種形式:
第一種形式:作為iostream類的成員函數(shù),需要在頭文件中聲明。
第二種形式:作為普通函數(shù),也需要在頭文件中聲明。
第一種形式的getline()函數(shù)有兩種重載形式:
1. istream& getline(char* s, streamsize n);
2. istream& getline(char* s, streamsize n, char delim);
這兩種形式的作用都是從輸入流中讀取最多n個字符(包括終止字符),然后將它們保存在字符數(shù)組s中。即使在讀取不滿n個字符的情況下,如果遇到指定的delim字符或達到字符數(shù)限制,讀取操作也會終止,而且delim字符不會被保存在s中。
#include
// std::cin ; std::cout ; std::endl
int main()
{
char name[256], wolds[256];
std::cout << "Please input your name: ";
std::cin.getline(name, 256);
std::cout << "Please input your wolds: ";
std::cin.getline(wolds, 256);
std::cout << "The result is: " << name << ", " << wolds << std::endl;
std::cout << std::endl;
return 0;
} 輸入:Mr. Ling
You are fantastic!
輸出:
Mr. Ling, You are fantastic!
通過字符數(shù)限制和指定終止字符進行修改的代碼示例:
#include
// std::cin ; std::cout ; std::endl
int main(){
char name[6];
std::cout << "Please input your name: ";
std::cin.getline(name, 6, '#');
std::cout << "The result is: " << name << std::ends;
std::cout << std::endl;//學習交流群:558970390
return 0;
} 輸入: //streamsize限定,截斷輸出 wonderful
輸出:wonde
輸入: //所設置的結束標識符,截斷輸出 won#derful
輸出:won
第二種方法:在C++中的getline函數(shù)具有四種不同的載入形式:
istream& getline (istream& 輸入流, string& 字符串, char 分隔符);
istream& getline (istream&& 輸入流, string& 字符串, char 分隔符);
istream& getline (istream& 輸入流, string& 字符串);
istream& getline (istream&& 輸入流, string& 字符串);
這些函數(shù)的用法與第一種方法類似,但是它們接受一個輸入流作為參數(shù),將讀取的內容存儲在字符串類型的字符串中。
函數(shù)參數(shù)的解釋:
輸入流:表示一個輸入流,例如cin。
字符串:這是一個字符串類型的引用,用于保存從輸入流中讀取的文本。
分隔符:這是一個字符類型的變量,用于指定何時終止讀取;如果未自定義分隔符,函數(shù)將在遇到換行符'\n'時終止讀取。
以下是一個示例代碼:
#include
#include
int main() {
std::string name;
std::cout << "Please input your name: ";
std::getline(std::cin, name);
std::cout << "Welcome to here!" << std::ends << name << std::endl;
std::cout << std::endl;
return 0;
} 在輸入數(shù)據(jù)時,只有在遇到換行符或文件結束時,才會停止接受輸入。
文件結束(EOF)是C語言中用于區(qū)分有效數(shù)據(jù)和輸入結束的特殊標志。EOF的輸入方式取決于操作系統(tǒng),例如在Windows下是使用Ctrl+Z,在Linux/Unix下是使用Ctrl+D。
需要注意的是,getline()函數(shù)并非C庫函數(shù),而是C++庫函數(shù)。它會在以下情況下終止讀取并生成當前字符串:
1. 達到文件末尾。
2. 遇到指定的定界符(默認定界符是換行符,所以遇到換行符時會返回)。
3. 輸入達到最大限制。
在下面的示例代碼中,我們使用getline()函數(shù)在while循環(huán)中作為條件判斷,實現(xiàn)逐行讀取并輸出:
#include
#include
using namespace std;
int main() {
string line;
while (getline(cin, line))
cout << line << endl;
return 0;
}
``` 大家可能會發(fā)覺,在運行時,通常的輸入方式都無法中斷循環(huán),有時甚至可能出現(xiàn)難以理解的錯誤。那么,究竟是什么原因導致了這種情況呢?接下來我們來詳細分析一下:
getline()函數(shù)的定義如下:istream& getline(istream & is, string & str, char delim);
在這個語句中,while循環(huán)的判斷條件實際上是關于cin(標準輸入流)的狀態(tài),也就是判斷當前是否存在有效的輸入數(shù)據(jù)流。
值得注意的是,輸入流是一個對象,我們在判斷時考慮的是這個流返回的狀態(tài)。因此,在正常情況下,無論你如何輸入,都無法跳出這個循環(huán)。
有些人可能會錯誤地認為while循環(huán)的判斷條件是關于"line"(即字符串line是否為空)的,試圖通過輸入回車來中斷循環(huán),但卻發(fā)現(xiàn)這并不奏效。
事實上,回車和設置的分隔符都可以用來終止getline()函數(shù)的讀取操作。然而,while循環(huán)的判斷條件實際上是在判斷getline()函數(shù)的輸入流是否有效。
本文標題:C++中getline函數(shù)多種定義的使用方法
URL地址:http://www.dlmjj.cn/article/copjics.html


咨詢
建站咨詢
