成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++中getline函數多種定義的使用方法

開發 前端
大家可能會發覺,在運行時,通常的輸入方式都無法中斷循環,有時甚至可能出現難以理解的錯誤。那么,究竟是什么原因導致了這種情況呢?

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

下面我們將詳細說明C++中的getline()函數用法,以及在使用getline()函數作為while循環條件時需要注意的問題:

在C++中,getline函數本質上有兩種形式:

第一種形式:作為iostream類的成員函數,需要在頭文件中聲明。

第二種形式:作為普通函數,也需要在頭文件中聲明。

第一種形式的getline()函數有兩種重載形式:

1. istream& getline(char* s, streamsize n);

2. istream& getline(char* s, streamsize n, char delim);

這兩種形式的作用都是從輸入流中讀取最多n個字符(包括終止字符),然后將它們保存在字符數組s中。即使在讀取不滿n個字符的情況下,如果遇到指定的delim字符或達到字符數限制,讀取操作也會終止,而且delim字符不會被保存在s中。

#include <iostream>
// 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!

通過字符數限制和指定終止字符進行修改的代碼示例:

#include <iostream>
// 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函數具有四種不同的載入形式:

istream& getline (istream& 輸入流, string& 字符串, char 分隔符);

istream& getline (istream&& 輸入流, string& 字符串, char 分隔符);

istream& getline (istream& 輸入流, string& 字符串);

istream& getline (istream&& 輸入流, string& 字符串);

這些函數的用法與第一種方法類似,但是它們接受一個輸入流作為參數,將讀取的內容存儲在字符串類型的字符串中。

函數參數的解釋:

輸入流:表示一個輸入流,例如cin。

字符串:這是一個字符串類型的引用,用于保存從輸入流中讀取的文本。

分隔符:這是一個字符類型的變量,用于指定何時終止讀取;如果未自定義分隔符,函數將在遇到換行符'\n'時終止讀取。

以下是一個示例代碼:

#include <iostream>
#include <string>
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;
}

在輸入數據時,只有在遇到換行符或文件結束時,才會停止接受輸入。

文件結束(EOF)是C語言中用于區分有效數據和輸入結束的特殊標志。EOF的輸入方式取決于操作系統,例如在Windows下是使用Ctrl+Z,在Linux/Unix下是使用Ctrl+D。

需要注意的是,getline()函數并非C庫函數,而是C++庫函數。它會在以下情況下終止讀取并生成當前字符串:

1. 達到文件末尾。

2. 遇到指定的定界符(默認定界符是換行符,所以遇到換行符時會返回)。

3. 輸入達到最大限制。

在下面的示例代碼中,我們使用getline()函數在while循環中作為條件判斷,實現逐行讀取并輸出:

#include <iostream>
#include <string>
using namespace std;
int main() {
string line;
while (getline(cin, line))
cout << line << endl;
return 0;
}
```

大家可能會發覺,在運行時,通常的輸入方式都無法中斷循環,有時甚至可能出現難以理解的錯誤。那么,究竟是什么原因導致了這種情況呢?接下來我們來詳細分析一下:

getline()函數的定義如下:istream& getline(istream & is, string & str, char delim);

在這個語句中,while循環的判斷條件實際上是關于cin(標準輸入流)的狀態,也就是判斷當前是否存在有效的輸入數據流。

值得注意的是,輸入流是一個對象,我們在判斷時考慮的是這個流返回的狀態。因此,在正常情況下,無論你如何輸入,都無法跳出這個循環。

有些人可能會錯誤地認為while循環的判斷條件是關于"line"(即字符串line是否為空)的,試圖通過輸入回車來中斷循環,但卻發現這并不奏效。

事實上,回車和設置的分隔符都可以用來終止getline()函數的讀取操作。然而,while循環的判斷條件實際上是在判斷getline()函數的輸入流是否有效。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2011-07-13 11:34:58

CC++時間函數

2010-02-02 09:32:32

C++ typedef

2010-01-26 17:35:09

C++棧

2010-03-10 19:18:10

Python scri

2010-01-25 14:10:21

C++堆棧

2010-02-02 09:49:02

C++模板

2010-02-04 10:52:36

C++字符串分割函數

2024-01-23 10:48:44

C++函數重載開發

2011-07-20 14:45:43

C++結構體

2011-07-20 17:48:07

C++

2011-07-20 17:31:12

C++

2009-08-28 17:01:43

C#構造函數

2009-06-26 10:05:10

獲取文件大小

2021-07-16 07:57:35

JavaScriptEval函數

2011-07-20 13:34:37

C++

2024-09-03 13:32:11

JavaScriptEval函數

2024-07-11 14:05:28

JavaScript函數

2010-01-25 10:25:19

C++變量

2010-01-27 17:16:52

C++構造函數

2010-01-26 10:42:26

C++函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品久久久久久一区二区 | 亚洲精品视频在线播放 | 夜夜夜夜草 | 狠狠艹 | 超碰男人天堂 | 奇米av | 色综合视频 | 亚洲成网| 羞羞色视频 | 日韩欧美中文在线 | 日日骚网 | 在线观看中文字幕视频 | 亚洲精久 | 琪琪午夜伦伦电影福利片 | 成人在线视频免费观看 | 美女国产精品 | 中文字幕精品一区 | 亚洲精品第一国产综合野 | 欧美男人天堂 | 亚洲国产精品一区二区www | 男女羞羞的网站 | 国产高清视频在线播放 | 日韩av啪啪网站大全免费观看 | 啪啪免费网 | 伊人激情综合网 | 国产激情一区二区三区 | 在线视频成人 | 久草热在线 | 一级免费看 | 欧美午夜视频 | 久久精品播放 | 欧美日韩一区二区在线 | 日韩精品人成在线播放 | 日韩欧美中文字幕在线观看 | 一区二区三区在线免费观看 | 欧美在线a | 国产片侵犯亲女视频播放 | 日批日韩在线观看 | 亚洲欧美bt | 久久亚洲一区二区三 | 亚洲国产精品久久久久婷婷老年 |