espacios - No lea más que el tamaño de la cadena con scanf()
scanf %d (4)
Debería usar el modificador de ancho de scanf()
y configurarlo para que sea uno menos que el tamaño de su cadena, de modo que se asegure de que haya espacio para el terminador NULL
.
Por lo tanto, si desea almacenar "sí", primero necesitará una matriz más grande que la que tiene; uno con tamaño 4, 3 caracteres más 1 para el terminador nulo. Además, debe indicar a scanf()
que no lea más de tamaño - 1 caracteres, donde tamaño es la longitud de su matriz, por lo tanto, 3 en este caso, como este:
#include <stdio.h>
int main(void)
{
char string[4];
scanf("%3s", string);
}
Edición: para mi clase tengo que usar scanf
. Por lo tanto, recomendar otras formas de entrada no es la solución que estoy buscando (si hay alguna que incluya scanf).
Si estoy leyendo información del usuario para un proyecto pequeño (por ejemplo, un juego). Digamos que te pregunto would you like to play?
Esto aceptaría una yes
o no
. Así que escribo un código simple como este:
#include <stdio.h>
int main(void)
{
char string[3]; //The max number of letters for "yes".
printf("Would you like to play?");
scanf("%s", string);
}
Así que este código debería simplemente pedirles que ingresen yes
o no
. Estoy configurando la longitud de mi char array
al tamaño 3
. De esta manera, es lo suficientemente grande como para contener yes
y también no
. Pero si alguien ingresara una entrada no válida como yesss
, sé cómo comparar la cadena luego para manejar un evento de este tipo, pero esto no sobrescribiría técnicamente / posiblemente otras variables locales que he declarado porque se extendería fuera de la longitud de mi ¿formación? Si es así, ¿hay una manera de manejar esto para restringir 3 caracteres de entrada o algo? Y si no, ¿por qué / cómo se sabe que solo se ingresa para el tamaño de 3?
* Nota: Soy nuevo en C y no pude encontrar mucho sobre esto, así que lo aprecio aunque sea simple. Porque claramente me falta algo. Vengo de un fondo de Java donde esto ni siquiera sería un problema.
La matriz debe poder contener cuatro caracteres, ya que también debe contener el terminador en 0. Con eso arreglado, especificando una longitud máxima en el formato,
scanf("%3s", string);
asegura que scanf
no lea más de 3 caracteres.
la forma más segura es usar
fgets (cadena, 4, estándar);
aquí puede almacenar un máximo de 3 caracteres, incluido un espacio reservado para el carácter NULO (''/ 0'').
cplusplus.com/reference/clibrary/cstdio/scanf
usar el modificador "ancho";
%[*][width][modifiers]type