Las funciones de la familia scanf admiten especificadores de conjunto de escaneo que se representan mediante %[]. Dentro de scanset, podemos especificar un solo carácter o un rango de caracteres. Mientras procesa scanset, scanf procesará solo aquellos caracteres que forman parte de scanset. Podemos definir scanset poniendo caracteres dentro de corchetes. Tenga en cuenta que los scansets distinguen entre mayúsculas y minúsculas.
También podemos usar scanset proporcionando una coma entre el carácter que desea agregar.
ejemplo: scanf(%s[AZ,_,a,b,c]s,str);
Esto escaneará todos los caracteres especificados en el conjunto de escaneo.
Veamos con ejemplo. El siguiente ejemplo almacenará solo letras mayúsculas en la array de caracteres ‘str’, cualquier otro carácter no se almacenará dentro de la array de caracteres.
C
/* A simple scanset example */ #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
Si el primer carácter de scanset es ‘^’, entonces el especificador dejará de leer después de la primera aparición de ese carácter. Por ejemplo, el scanset a continuación leerá todos los caracteres pero se detendrá después de la primera aparición de ‘o’
C
scanf("%[^o]s", str);
Veamos con ejemplo.
C
/* Another scanset example with ^ */ #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]#
Implementemos la función gets() usando el conjunto de exploración. La función gets() lee una línea de stdin en el búfer al que apunta s hasta que se encuentra una nueva línea de terminación o EOF.
C
/* implementation of gets() function using scanset */ #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]#
Como nota al margen, usar gets() puede no ser una buena idea en general. Consulte la nota a continuación de la página de manual de Linux.
Nunca use gets(). Debido a que es imposible saber sin conocer los datos de antemano cuántos caracteres leerá get(), y debido a que gets() continuará almacenando caracteres más allá del final del búfer, es extremadamente peligroso usarlo. Se ha utilizado para romper la seguridad informática. Utilice fgets() en su lugar. También vea esta publicación.
Este artículo fue compilado por «Narendra Kangralkar» y revisado por el equipo de GeeksforGeeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA