C++ fscanf 读取一整行

摘要:
…)%c单个字符%[]一个字符集*读入输入项后跳过,并返回成功分配的变量(整数)数。发生错误时,返回EOF%[^],这意味着读取一整行,在遇到新行字符之前,所有字符的集合“fscanf(fp)”。尚未读取新行字符;*表示读取后跳过输入项。因此,%*c表示跳过字符并为str赋值;可以写入fscanf(fp)。当缓存中只有一个时;%*[^]在找到之前没有任何内容,以下%*c不起作用。

scanf, fscanf很相似,都是从流中读取输入,然后赋值给变量

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

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

%c 单一字符

%[] 一个字符集

* 输入项读入后跳过,不赋予任何变量

scanf, fscanf 自动跳过tabs和空格,其他字符赋予变量,返回成功赋值的变量数(整数),发生错误时返回EOF

%[^ ] 表示读取一整行,^ 表示 “非”,前面提到 %[] 表示一个字符集,所以 %[^ ] 表示“遇到一个换行符之前的所有字符的集合”,随后就结束读入。

char str[80];

fscanf(fp,"%[^ ]",str);

但是这么做以后,那个换行符还没有读取。

前面提到了,* 表示输入项读入后跳过,所以 %*c 表示跳过一个字符,所以可以写

fscanf(fp, "%[^ ]%*c", str);

读取换行符之前的所有内容,赋值给str,然后跳过换行符,指向下一行内容。

如果要跳过整行,可以写

fscanf(fp, "%*[^ ]%*c");

但有时也会出错,当缓存中只有一个 时,%*[^ ] 发现 之前没有任何内容,会直接返回,后面的 %*c 不起作用。所以缓存中只有 时,上面那行代码不管运行多少遍,都是什么都不做。

为了避免上面的情况,可以修改为

fscanf(fp, "%*c%*[^ ]");

那么如果缓存中只有一个 ,%*c 会跳过它,%*[^ ] 会跳过下一行换行符之前的内容;如果缓存中不是 ,则 %*c 跳过第一个字符,%*[^ ] 跳过后面的内容(换行符之前),即跳过一行,缓存中留一个 。

缓存中留一个 不影响 %d, %lf 等语句,所以这么写更安全。

免责声明:文章转载自《C++ fscanf 读取一整行》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 微信支付,授权,分享回调区分记录C语言探索之旅 | 第一部分第三课:你的第一个程序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MsSQL字段类型大小说明

(1)二进制数据类型  二进制数据包括 Binary、Varbinary 和 Image  Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。  Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。  Varbinary[(n)] 是 n 位变长度的...

32. Springboot 系列(八)动态Banner与图片转字符图案的手动实现

使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号。查看官方文档可以找到关于 banner 的描述 The banner that is printed on start up can be changed by adding a banner.txt file to your cl...

Python基础24_正则表达式,re模块,

 一. 正则表达式     正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。     正则表达式由普通字符和元字符组成, 普通字符包含大小写字母, 数字. 在匹配普通字符的时候我们直接写就可以了  ...

mysql last_insert_id() (转载)

先来看看官方的说明 The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_I...

Firefox浏览器设置字符编码格式

今天写博客,敲示例代码时遇到的问题。简单的HTML页面,在火狐浏览器出现中文乱码。如果是IE浏览器的话,直接通过菜单查看 –> 编码 就可以指定编码方式,解决乱码问题。现在Firefox浏览器版本升级太快,且展示方式也经常变化,本人还找了一番才找到火狐浏览器的设置字符编码的方式,在此分享出来,希望能帮到碰到这个问题的朋友。 本人使用的Firefo...

oracle正则表达式regexp_like的用法详解

ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的功能相似4,REGEXP_REPLACE :与REPLACE的功能相似它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和RE...