scanf系列函数支持用%[]表示的scanset说明符。里面扫描集,我们可以指定单个字符或字符范围。在处理scanset时,scanf将仅处理属于scanset的那些字符。我们可以通过将字符放在方括号内来定义scanset。请注意,扫描集区分大小写。
我们还可以通过在要添加的字符之间提供逗号来使用scanset。
例如:scanf(%s [AZ,_,a,b,c] s,str);
这将扫描扫描集中的所有指定字符。
让我们来看一个例子。下面的示例仅将大写字母存储到字符数组’str’,其他任何字符都将不存储在字符数组中。
C
/* A simple scanset example */
#include
int main(void)
{
char str[128];
printf("Enter a string: ");
scanf("%[A-Z]s", str);
printf("You entered: %s\n", str);
return 0;
}
C
scanf("%[^o]s", str);
C
/* Another scanset example with ^ */
#include
int main(void)
{
char str[128];
printf("Enter a string: ");
scanf("%[^o]s", str);
printf("You entered: %s\n", str);
return 0;
}
C
/* implementation of gets() function using scanset */
#include
int main(void)
{
char str[128];
printf("Enter a string with spaces: ");
scanf("%[^\n]s", str);
printf("You entered: %s\n", str);
return 0;
}
[root@centos-6 C]# ./scan-set
Enter a string: GEEKs_for_geeks
You entered: GEEK
如果scanset的第一个字符为’^’,则说明符将在该字符第一次出现后停止读取。例如,下面给出的scanset将读取所有字符,但在首次出现’o’之后停止
C
scanf("%[^o]s", str);
让我们来看一个例子。
C
/* Another scanset example with ^ */
#include
int main(void)
{
char str[128];
printf("Enter a string: ");
scanf("%[^o]s", str);
printf("You entered: %s\n", str);
return 0;
}
[root@centos-6 C]# ./scan-set
Enter a string: http://geeks for geeks
You entered: http://geeks f
[root@centos-6 C]#
让我们通过使用扫描集来实现gets()函数。 gets()函数从stdin读取一行到s所指向的缓冲区,直到找到终止的换行符或EOF。
C
/* implementation of gets() function using scanset */
#include
int main(void)
{
char str[128];
printf("Enter a string with spaces: ");
scanf("%[^\n]s", str);
printf("You entered: %s\n", str);
return 0;
}
[root@centos-6 C]# ./gets
Enter a string with spaces: Geeks For Geeks
You entered: Geeks For Geeks
[root@centos-6 C]#
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。