對於字串的讀入,我們有scanf和cin這兩個最為經典的函式,但是我們發現這兩個函式如果遇到空格或換行就結束了。可有時我們希望讀到空格時不要結束,讀到回車在結束。甚至有時我們希望連遇到空格也不結束,直到遇到乙個指定的字元時才結束本次讀入。
而cstdio和iostream標頭檔案為了解決這個問題分別提供了兩個函式——gets和getline函式。
所在標頭檔案:cstdio
gets
(ch + begin)
;
功能:讀取字串儲存在ch陣列中(第一位存在ch[begin]),直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為『\0』空字元,並由此來結束字串。
返回值:讀入成功,返回與引數buffer相同的指標;讀入過程中遇到eof(end-of-file)或發生錯誤,返回null指標。所以在遇到返回值為null的情況,要用ferror或feof函式檢查是發生錯誤還是遇到eof。
引數:char型別陣列的首位址(不可以是string型別的)必要所在標頭檔案:iostream
getline
(cin, str, ch)
;
功能:讀取字串儲存在str字串中(第一位存在ch[begin])。如果有第三個引數直至接受到ch或eof時停止,否則預設第三個引數為換行符。讀取的ch被轉換為『\0』空字元,並由此來結束字串。
返回值:讀入成功時返回讀取的位元組數,失敗返回-1。
引數:讀入方式(大部分情況下都為cin)必要string型別的字串必要char型別的字元選要備註:gets與getline的本質區別是gets是讀入char型別字元陣列的,而getline是讀入string型別的字串的。而且getline函式還可以讀到你指定的字元結束,而gets只能讀到換行符結束。
以下為**(ps:nr是指數組個數的上限)
# include
# include
# include
# include
# include
# include
using
namespace std;
# define for(i, a, b) for(int i = a; i <= b; i++)
# define _for(i, a, b) for(int i = a; i >= b; i--)
const
int nr =
100;
char ch[nr +10]
;string str;
intmain()
god bless you for ever! C語言字串讀入函式筆記
gets str 函式和scanf s str 區別 二者都是從終端讀入字串。功能為 1 gets功能為讀入一行,並將換行符轉換為字串結束符。2 scanf s s 讀入時,遇到空白字元,包括空格,製表符,換行符時均會停止輸入。從功能上可以看出不同之處 1 終止條件不同。gets只有遇到 n時才會結...
字串讀入問題 C語言
字串讀入3種形式 scanf gets getchar scanf不可以讀入空格,讀入空格即可停止,算乙個字元陣列 不含空格 可以應用於2個句子間有很多空格,但2個句子本身沒有空格 gets可以讀入空格,可以讀入含有空格的句子的時候,getchar是讀入乙個字元,可以讀入空格,經常用於處理讀掉空格。...
scanf讀入字串與讀入字元的區別
今天下午比賽時候有道題用c 輸入輸出是超時的,所以準備換上c試試,發現幾個小問題 1 使用scanf c a 讀取a a是char型別 如果讀取之前有換行符或者空格,那麼a就會把之前的換行符或者空格讀取到,解決方法就是這之前先getchar 一下。2 而如果用scanf s str 讀取str 我發...