1. 程式人生 > >C++ fscanf 讀取一整行

C++ fscanf 讀取一整行

format 賦值 str orm can scanf mat har tabs

scanf, fscanf很相似,都是從流中讀取輸入,然後賦值給變量

int scanf(const char *format, ...)

int fscanf(FILE *stream, const char *format,...)

%c 單一字符

%[] 一個字符集

* 輸入項讀入後跳過,不賦予任何變量

scanf, fscanf 自動跳過tabs和空格,其他字符賦予變量,返回成功賦值的變量數(整數),發生錯誤時返回EOF

%[^\n] 表示讀取一整行,^ 表示 “非”,前面提到 %[] 表示一個字符集,所以 %[^\n] 表示“遇到一個換行符之前的所有字符的集合”,隨後就結束讀入。

但是這麽做以後,那個換行符還沒有讀取。

前面提到了,* 表示輸入項讀入後跳過,所以 %*c 表示讀入一個字符,但不賦值給任何變量,所以可以寫

fscanf(fp, %[^\n]%*c, str)

其中 fp 是文件流指針,str是一個字符串變量,這句代碼的意思就是:讀取換行符之前的所有內容,賦值給str,然後跳過換行符,指向下一行內容。

C++ fscanf 讀取一整行