關於getline函式的輸出問題

2022-11-07 19:40:21 字數 4336 閱讀 7369

1樓:

istream& getline ( istream& is, string& str, char delim );

istream& getline ( istream& is, string& str );

將輸入流is中讀到的字元存入str中,直到遇到終結符delim才結束。對於第一個函式delim是可以由使用者自己定義的終結符;對於第二個函式delim預設為 '\n'(換行符)。

你用的是第二種,故要輸入兩次回車

2樓:

是應該馬上輸入,但是我試了一下,沒你說的這個問題。

一個關於getline函式的問題……

3樓:黃邦勇帥哥哥

解決方法很簡單:

在 cin >> n; 後加上cin.ignore();就ok了,即

cin >> n;

cin.ignore(); //ignore()函式表示讀取並丟掉一個字元。

原理:在輸入變數n的值後,回車換行符仍保留在輸入流中,再下次使用輸入語句時會直接將回車換行符輸入給下一個變數(當然變數必須能接收此值,一般情況下cin都會直接過濾掉空白,換行,製表符,也就是這些字元使用cin進行輸入不會被變數接收,而是繼續被留在輸入流中,但getline和get就不同,他們會把這些字元輸入給相應的變數),cin讀入的內容是過濾掉空白,換行,製表符之後第1個有效字元輸入給變數,直到輸入的字元與此變數的型別不皮配或者再次遇到空白,換行,製表符,因此對於int型變數a,可以這樣輸入4def,這樣變數a的值為4,但字元def卻被留在了輸入流中,或後面還有一個char型別的變數,則cin>>b會自動將第一個字元d輸入給變數b,而不會再次提示你輸入值。

注意:不帶引數的ignore()只能丟棄一個字元,如果你在輸入n時,輸入的是諸如 3f或者3fff這樣的輸入的話,會導致與你現在相同的情況

具體請參看《c++的io(輸入輸出)專題》裡面有講解,但沒有有關getline輸入string型別變數的問題,但c++流的原理是相同的,只是函式的反回型別和形參,還有呼叫方法不一樣。

4樓:牛頓一餐一頓牛

問題在於此:你需要理解getline

getline(cin, a)和cin>>a不一樣的是,getline並不忽略行開頭的換行符,只要getline遇到換行符,即便它是輸入的第一個字元,getline也將停止讀入並返回。如果第一個字元就是換行符,則string引數將被置為空string。

輸入n之後有一回車,所以讀入a之前遇到換行符,直接返回空串

5樓:

試了一下,確實有lz的問題。分析了一下問題出在輸入完n之後。

如果一開始正確輸入了一個數值並讀入到n,該行剩下的回車鍵之前的其他內容系統自動給了a,也可能輸入數值n之後沒有其他內容直接就是回車了,這是給a的就是空的了,而再起行輸入的內容給了b了,所以不經意走掉一個a了。

如果一開始輸入的內容不是一個有效的數值形式,則n讀入失敗,n變成了0,之後的for迴圈條件為false沒有進入,直接退出了。

c++中,getline函式的詳解

6樓:匿名使用者

c++中本質上有兩種getline函式,一種在標頭檔案中,是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對應的陣列中。

二、在中的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中。

7樓:蘿蔔肥

char s[1000]; (中括號裡的數字小於1000可能會出錯,但不一定出錯,原因上面已講)

或者char* s=new char[1000];

或者char a[1000];char * s=a;

或者char a[1000];char *s=&a[0];

8樓:

getline

語法

getline()函式用於輸入流,讀取字元到buffer中,直到下列情況發生:

num - 1個字元已經讀入,

碰到一個換行標誌,

碰到一個eof,

或者,任意地讀入,直到讀到字元delim。delim字元不會被放入buffer中。

9樓:匿名使用者

getline功能getline是string類物件的成員函式,屬於string io 操作。用於讀取整行文字

getline引數getline(cin,str);cin:輸入流str:string物件

getline說明getline函式從輸入流的下一行讀取,並儲存讀取的內容到str中,但不包括換行符。getline 函式將 istream 引數作為返回值,和輸入操作符一樣也把它用作判斷條件。   範例:

  #include #include using namespace std;  int main()    結果:  輸入 line1 ----回車換行  顯示為空  輸入 line2 ----回車換行  顯示 line1  輸入 line3 ----回車換行  顯示 line2  ----(以此類推

c++問題getline函式和檔案操作。

10樓:匿名使用者

while(geline(infile,line))

你這是打算一直迴圈到eof, 最後當然就是空

應該是 if(line.empty()) continue; else break;

11樓:

while(geline(infile,line))//手誤嗎?geline->getline

//while迴圈體內改為:

if(!line.empty())

break;

12樓:正能量女戰神

c++getline函式:

原型

引數is 進行讀入操作的輸入流  str 儲存讀入的內容  delim 終結符

返回值與引數is是一樣的

功能將輸入流is中讀到的字元存入str中,直到遇到終結符delim才結束。對於第一個函式delim是可以由使用者自己定義的終結符;對於第二個函式delim預設為 '\n'(換行符)。  函式在輸入流is中遇到檔案結束符(eof)或者在讀入字元的過程中遇到錯誤都會結束。

在遇到終結符delim後,delim會被丟棄,不存入str中。在下次讀入操作時,將在delim的下個字元開始讀入。

‍c++檔案操作:

c++用 ifstream 宣告輸入檔案物件,用 ofstream 宣告輸出檔案物件。

使用ofstream簡化檔案輸出(不用使用fwrtie):

使用ifstream簡化檔案輸入(不用使用fread):‍‍

c++讀入檔案時getline函式怎麼使用? 5

c++裡為什麼getline函式不放到第一行就不執行呢??

13樓:匿名使用者

因為先輸入n後,輸入流裡面還有一個換行沒有清除如果是先輸入數字回車後下一行再輸入字串,可以這樣:

cin >> n;

cin.sync();

getline(cin,str);

vfp中,資料型別函式「type函式」中輸出的「U」是什麼意思

未定義或者未知的資料型別 表示未定義,就是此變數沒有定義 type是型別的意思!是啥語言的?c?basic putback,功能是將 字元加入到該物件對應的stream 流 中。是流物件的成員函式。對stream的 vfp的type函式 type m m 是一個變數 type m m 才是一個字元常...

關於excel的函式if的問題

這是因為用right,left或mid等函式提取出來的字串是文字資料,而文字數字大於一切常規數字,所以公式就會出錯 你的公式可以改成 if right a1,2 50,right a1,2 50,right a1,2 或 if right a1,2 1 50,right a1,2 50,1 righ...

函式y f x 的影象關於直線y x對稱的函式影象的解析式是

取函式y f x 上任意bai一點,即 b,c 有c f b 這點 b,c 關於dux a對稱的點便是zhi b a,c 此時,這個點就是原函式dao所對稱的那個函式 也就是我們要求的那個函式,我們就設它為y f x 上的點。所以便有y y c時,有x b a x a。即x x a。故其所對應的函式...