1. 程式人生 > >關於函數getline()(簡單註意事項,不懂你懟我!!!)

關於函數getline()(簡單註意事項,不懂你懟我!!!)

為什麽 你在 進行 ios 二次 mce cond ont esp

關於getline()函數好使但是有毒;

有兩種操作需要進行特殊處理:

First:

#include <iostream>
#include <cstring>
#include <cstdio>
#include
<algorithm> #include <sstream> using namespace std; int n; int a[100]; int b[100],c[100]; int main() { while (cin>>n) { string s; //測試樣例請用:
// 10
// 1 2 3 4 5
//6 7 8 9
string ss; string sss; getline(cin,s); //自己想想這一個存的啥;
getline(cin,ss); //這個呢 getline(cin,sss); //還有這個。。 cout
<<s<<endl<<ss<<endl<<sss<<endl; } return 0; }

輸出結果你蒙(應該是蒙吧,難道你知道?神犇!?)對了麽??

cin>>n;進行完畢之後有一個\n;但是\n並不能存到n中,於是留在了緩沖區;

而當s進行讀入一行操作時,實際上存入的是\n。

那麽你在 ss中讀入1 2 3 4 5 之後的換行為什麽不需要另開一個string類型存儲,反而6 7 8 9可以直接存到sss中去呢??想一下;

因為是讀入一行操作,\n會被存入那一行中,而不是像n一樣不能存儲。所以不需要重開一個,你蒙對了麽(馬鹿?)

還有另一種輸入引發的另一個問題,(註意讀取無用行的位置不同)

Second:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include 
<sstream> using namespace std; int n; int a[100]; int b[100],c[100]; int main() { string s; string ss; string buf; while (getline(cin,s)) { int a; //如果你還是在這裏插入getline(cin,buf)而不是最後;那麽第一次循環buf會取代ss讀入,ss就會讀下一行而不是應該讀取的這一行;第二次循環時s讀入不了; getline(cin,ss); cin>>a; //這裏會遺留\n; getline(cin,buf); } return 0; }

PS:

這個問題為什麽提出,解決什麽問題呢??

題目中若要求在一組樣例中讀入多行則需要註意你讀入的究竟是什麽東西。

關於函數getline()(簡單註意事項,不懂你懟我!!!)