1. 程式人生 > 其它 >關於一直記不清弄不明的scanf("%s", a) gets() getline()

關於一直記不清弄不明的scanf("%s", a) gets() getline()

scanf("%s", a) 對於char型陣列使用 讀取一串字元,遇到空格停止

gets(a)    對於char型陣列使用 讀取一行字元,並且需要注意使用 gets() 時,系統會將最後“敲”的換行符從緩衝區中取出來,然後丟棄,所以緩衝區中不會遺留換行符。這就意味著,如果前面使用過 gets(),而後面又要從鍵盤給字元變數賦值的話就不需要再用 getchar() 吸收回車清空緩衝區了,因為緩衝區的回車已經被 gets() 取出來扔掉了。

getline(cin, a) 對於string類使用    讀取一行

getline()的原型是istream& getline ( istream &is , string &str , char delim ); 其中 istream &is 表示一個輸入流,譬如cin;string&str表示把從輸入流讀入的字串存放在這個字串中(可以自己隨便命名,str什麼的都可以);char delim表示遇到這個字元停止讀入,在不設定的情況下系統預設該字元為'\n',也就是回車換行符(遇到回車停止讀入)。如果自己設定非'\n'終止符,則正常讀入'\n',不會終止 注: while(getline(cin,line)) 不會跳出迴圈,while判斷的是 cin 而非 line

getline()中的結束符不讀入,結束後,結束符不放入快取區;

cin的結束符(空格、換行),結束後,結束符還在快取區;

所以在使用完cin 再使用 getline 時,注意要用 getchar() 吸收一下