scanf函数的特性

我们知道,scanf函数用于从标准输入获取格式化数据。scanf家族中除了scanf本身外,还有fscanf/sscanf,分别对应从文件/字符串读取格式化数据,另外以v开头的是相应的不定参数版本。这些函数的表现行为类似,下面以scanf为例说几个不常用的特点。

1. 函数有返回值

scanf根据格式化参数从标准输入中读取数据:

2. 匹配失败时立即返回

format参数可包含下列内容:

3. 格式化字符串支持正则

注意:格式化字符串中的数量限制的含义是读取的最长长度,如果输入不够则按输入长度来。

例子:按行读取数据后原样输出,注意忽略空行,每行长度不超过50字节。

char buf[64];
int ret;
for (;;) {
    ret = scanf("%[^\n]%*c", buf);
    if (EOF == ret) /* no more data */
        break;
    if (0 == ret) { /* blank line */
        fgets(buf, sizeof(buf), stdin); /* fetch the linefeed */
        continue;
    }
    printf("%s\n", buf);
}
Table of Contents