Page Top

各种闲着没事的 scanf 奇葩用法

各种闲着没事的 scanf 奇葩用法

然而这些却很好用诶。

同理,scanf 可以拓展到 sscanf、fscanf~

例题:P1580 yyy loves Easter_Egg IP7911 网络连接

未计入更加奇葩的 C 语言用法,比如 %i %a 这种明显等价的转换字符。

基础1:整数输入

十进制 32 位整数:%d
十进制 32 位无符号整数:%u
十进制 64 位整数:%lld
十进制 64 位无符号整数:%ull

八进制 32 位整数:%o
十六进制 32 位整数:%x

基础2:浮点数读入

单精度浮点数(float):%f
双精度浮点数(double):%lf
高精度浮点数(long double):%LF

基础3:字符输入

输入一个字符:%c

警戒:在 Windows 下会读入 « 除了换行符 » 以外的所有字符,包含空格;而在 Linux 下会读入任意字符 « 包含换行 » !

基础4:字符串输入

输入一个字符串:%s

表示,从当前位置,找到这个及以后的 « 第一个非空白字符 » ,读到 « 空白字符 » 为止。

警戒:在 Windows 下会抛弃最后的 « 行尾换行符 » ;而在 Linux 下会读入 « 行尾换行符 » !

基础5:读入指定集合字符

读入一个仅包含指定字符集合的字符串:%[...]

特殊的,如果当前位置的字符不属于该集合,则返回 PrA?

用类似 %[123] 表示读入仅包含 123 的连续字符串;用类似 %[^,] 表示读入不包含 , 的连续字符串。

进阶1:跳过输入内容

% 和转换字符之间放置符号 *,表示跳过这个内容,不回传。

例:%*d%*[^@]

进阶2:sscanf

形式:sscanf(字符串, "转换字符", 回传变量)

其中,字符串需为 C 风格,对于 C++ 的 string 类型,可以使用 str.c_str() 转换。

进阶3:fscanf

形式:fscanf(文件源, "转换字符", 回传变量)

其中,文件源为 FILE 类型,常见的有 stdin

posted @ 2023-10-31 11:22  RainPPR  阅读(80)  评论(1编辑  收藏  举报