scanf family functions support scanset specifiers which are represented by %[]. Inside scanset, we can specify single character or range of characters. While processing scanset, scanf will process only those characters which are part of scanset. We can define scanset by putting characters inside square brackets. Please note that the scansets are case-sensitive.
We can also use scanset by providing comma in between the character you want to add.
example: scanf(%s[A-Z,_,a,b,c]s,str);
This will scan all the specified character in the scanset.
Let us see with example. Below example will store only capital letters to character array ‘str’, any other character will not be stored inside character array.
C
#include <stdio.h>
int main( void )
{
char str[128];
printf ( "Enter a string: " );
scanf ( "%[A-Z]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
If first character of scanset is ‘^’, then the specifier will stop reading after first occurrence of that character. For example, given below scanset will read all characters but stops after first occurrence of ‘o’
Let us see with example.
C
#include <stdio.h>
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]#
Let us implement gets() function by using scan set. gets() function reads a line from stdin into the buffer pointed to by s until either a terminating newline or EOF found.
C
#include <stdio.h>
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]#
As a side note, using gets() may not be a good idea in general. Check below note from Linux man page.
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead. Also see this post.
This article is compiled by “Narendra Kangralkar“ and reviewed by GeeksforGeeks team. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!
Last Updated :
06 Jul, 2021
Like Article
Save Article