Para limitar el número de caracteres se usa un entero, que representa el número máximo de caracteres a recoger, entre % y s.
La técnica de los corchetes es para asegurarse que la cadena solo recoge esos caracteres.
Leerá caracteres hasta que encuentre uno que no sea a, b, o c; en ese momento se detendrá sin recoger ese valor no válido. Cuidado: la cadena a recoger debe empezar al menos, con uno de esos caracteres, sino no está definido su comportamiento.
De igual forma se puede hacer que scanf vaya recogiendo caracteres hasta encontrarse uno de los caracteres de la lista.
Así, mientras va leyendo encuentra a, b o c, se va a detener sin recoger ese carácter.
Es sustituto de gets, sin el inconveniente de que recoge el caracter '\n' lo siguiente:
Pues recogerá, también, espacios y tabulaciones. Si se usa el entero delimitador de caracteres se tiene la seguridad de no sobrepasar el buffer:
Si no trabajas con linux u otro *nix y puedes hacer uso de 'man' en tu consola, escribe 'man <nombre_de_funcion>' en tu buscador de internet. Te llevará rápidamente a las páginas de los manuales de estos SS.OO. que también están publicadas en la red.
Código (c) [Seleccionar]
scanf("%5s", cadena);
La técnica de los corchetes es para asegurarse que la cadena solo recoge esos caracteres.
Código (c) [Seleccionar]
scanf("%[abc]", cadena);
Leerá caracteres hasta que encuentre uno que no sea a, b, o c; en ese momento se detendrá sin recoger ese valor no válido. Cuidado: la cadena a recoger debe empezar al menos, con uno de esos caracteres, sino no está definido su comportamiento.
De igual forma se puede hacer que scanf vaya recogiendo caracteres hasta encontrarse uno de los caracteres de la lista.
Código (c) [Seleccionar]
scanf("%[^abc]", cadena);
Así, mientras va leyendo encuentra a, b o c, se va a detener sin recoger ese carácter.
Es sustituto de gets, sin el inconveniente de que recoge el caracter '\n' lo siguiente:
Código (c) [Seleccionar]
scanf("%[^'\n']", cadena);
Pues recogerá, también, espacios y tabulaciones. Si se usa el entero delimitador de caracteres se tiene la seguridad de no sobrepasar el buffer:
Código (c) [Seleccionar]
scanf("%16[^'\n']", cadena);
Si no trabajas con linux u otro *nix y puedes hacer uso de 'man' en tu consola, escribe 'man <nombre_de_funcion>' en tu buscador de internet. Te llevará rápidamente a las páginas de los manuales de estos SS.OO. que también están publicadas en la red.