C++中getline函數的用法,getline函數怎麼用
getline()函數有兩個版本,關於這個三個參數的版本,它的第一個參數是指向字符數組的指針,因為你定義的是:char *s(只説明s是指向字符類型的指針,但沒有説明它是指向字符數組的),這樣能通過編譯,但會運行錯誤,因為編譯器在編譯時不知道s是指向字符數組的,它以為是指向一個字符的,就只為 s所指向的內容分配一個字節的內存,這樣當運行時,程序存那1000個字符是這樣做的:先找到s所指向的內存,也就是之前分配的一個字節,存入第一個字符,然後按這個內存地址的順序繼續往下存餘下的字符(因為數組是地址連續的),但這時就可能出現錯誤,因為除了第一個內存是之前分配了的,其他的內存都是未分配的,但又可能是已經存儲了其他數據的,所以會出錯。而且是可能出錯,因為是可能已經存儲了其他數據。
當你把程序改成這樣:
char s[1000]; (中括號裏的數字小於1000可能會出錯,但不一定出錯,原因上面已講)
或者char* s=new char[1000];
或者char a[1000];char * s=a;
或者char a[1000];char *s=&a[0];
cin.getline(s,1000,'n');
至於連用兩個getline函數沒有問題,只是第二個會覆蓋第一個所讀取的內容,最終數組中存儲的是第二次調用getline函數讀取的內容。
2.C++ getline函數的用法應該是因為標準輸入每次回車都向程序輸入數據的原因。
標準輸入是以回車為單位向程序輸入數據,也就是説當ni hao回車後,程序得到了如下輸入
”ni haon",這個串被第一個getline讀取後,因為正常讀到了分隔符,認為輸入數據並沒有結束,第二個getline再次讀取時,發現標準輸入數據中沒有內容,返回空串,同時標記輸入數據結束。
這個問題只會發生在標準輸入上,讀文件沒有這個問題,讀文件時第二個getline會讀到第二行數據。
3.c++讀入文件時getline函數怎麼使用getline常用的就兩種用法:
1.getline(input,str);
2.getline(input,str,delim);input就是從哪裏讀入,通常是cin
str是你的讀入字符串,
delim是分隔符。
例如:
string str;
getline(cin,str,'n'); //用換行符分割每行然後判斷讀入完成也是容易的,
直接用返回值就好了。
例如:
string str;
while(getline(cin,str))
{
cout<<str;
}
4.C++中,getline函數的詳解C++中本質上有兩種getline函數,一種在頭文件<istream>;中,是istream類的成員函數。一種在頭文件<string>;中,是普通函數。
一、在<istream>;中的getline函數有兩種重載形式:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
作用是從istream中讀取至多n個字符保存在s對應的數組中。即使還沒讀夠n個字符,如果遇到換行符'n'(第一種形式)或delim(第二種形式),則讀取終止,'n'或delim都不會被保存進s對應的數組中。
二、在<string>;中的getline函數有四種重載形式:
istream& getline (istream& is, string& str, char delim);istream& getline (istream&& is,
string& str, char delim);istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
用法和上一種類似,不過要讀取的istream是作為參數is傳進函數的。讀取的字符串保存在string類型的str中。
擴展資料:
getline不是C庫函數,而是gcc的擴展定義或者C++庫函數。它會生成一個包含一串從輸入流讀入的字符的字符串,直到以下情況發生會導致生成的此字符串結束。
1)到文件結束,
2)遇到函數的定界符,
3)輸入達到最大限度。
參考資料:getline函數-百度百科
5.getline函數用法實例這是MSDN上對getline()函數的描述:
The getline function creates a string containing all of the characters from the input stream until one of the following situations occurs: 1)End of file. 2)The delimiter is encountered. 3)is.max_str elements have been extracted.
翻譯一下大致就是:
getline()函數會生成一個包含一串從輸入流讀入的字符的字符串,直到一下情況發生會導致生成的此字符串結束。1)到文件結束,2)遇到函數的定界符,3)輸入達到最大限度。
明顯您説問的情況是正好對於第二中情況,此處的定界符是‘n',getline()函數默認情況下以'n'為輸入結束符,而結束後的處理可以同樣用MSDN上對此函數的描述來解釋:
After the function extracts an element that compares equal to delim, in which case the element is neither put back nor appended to the controlled sequence.
翻譯一下大致意思是:
在函數遇到和結束定界符相等的字符時函數結束,同時函數抽出定界符,此種情況下該定界符既不被放回輸入流,也不被放入要生成的字符串。所以由此可以理解輸入結束後的第一個回車是定界符,被確認後拋棄,而第二個才是程序執行運行時正常需要的!
這麼解釋看樓主能理解不能,你可以這樣用一下getline看看結果就知道
1)getline(cin, s, ' ');
2)getline(cin, s, 'n');
這兩個輸入串後結束時敲的終止符是不同的第一個到test後面的istream是不被讀入的,因為斷在test後的空格處樓主也可以之輸入test然後盡情的敲回車,但是它是不會停止的因為回車被當作合理字符讀入了s字符串中,而第二個和樓主問的就一樣了。
6.求C++getline()函數的用法getline()是屬於string流. 讀取從鍵盤輸入的字符串.直到遇到結束符.
而cin.getline()是屬於istream流. 一樣讀取從鍵盤輸入字符,但是可以限定讀取多少個字符或者將哪個字符當作結束符.
兩個函數雖然類似. 但是卻是不一樣的.
兩個函數都可以接受空格並輸出.
如:
#include <string>
#include <iostream>
using namespace std;
int main(){
string str;
getline(cin,str);
cout<<str;
}
輸入abcde fg
輸出abcde fg
而cin.getline則可以這樣用:
char[10] str;
cin.getline(str,10,'e');
輸入ab cdefg
輸出ab cd
把'e'當成結束符. 所以只接受了'e'前面的字符
7.c++中的getline()函數怎麼使用,有什麼功能看你想用哪個啦~~
鍵盤輸入:
string s;
getline( cin, s );
cout << "You entered " << s << endl;
文件輸入:
ifstream fin("tmp.dat");
int MAX_LENGTH = 100;
char line[MAX_LENGTH];
while( fin.getline(line, MAX_LENGTH) ) {
cout << "read line: " << line << endl;
}
8.簡要介紹getline()函數的用法,並對程序中getline()用法給出註釋函數原型:2113
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
參數1是 輸入5261文件流對象。
參數2是 string 型對象。
參數3是選項參數,若有,它便是分隔符。
getline(input, line) 裏 input 是 輸入文件流對象,
前面定義了:ifstream input("test.txt"); 對應文件 test,txt
前面定義了: string line, word; 所以4102line 是 string 型對象。
getline(input, line) 從 test,txt 讀入1行內容1653,放入 string 型對象 line。
返回值是 輸入文件流對象 input (如果文件到達EOF 或 發生錯專誤,eofbit,failbit,badbit 的標誌位將變屬化)。
while( getline(input, line) ) {} 循環體內應加輸入狀態的判斷,及時 break;