¿Cómo se permite ingresar espacios usando scanf?
Usando el siguiente código:
char *name = malloc(sizeof(char) + 256);
printf("What is your name? ");
scanf("%s", name);
printf("Hello %s. Nice to meet you.\n", name);
Un usuario puede ingresar su nombre, pero cuando ingresa un nombre con un espacio como Lucas Aardvark
, scanf()
simplemente corta todo lo que sigue Lucas
. ¿Cómo hago para scanf()
permitir espacios ?
Las personas (y especialmente los principiantes) nunca deben usar scanf("%s")
o gets()
cualquier otra función que no tenga protección contra desbordamiento del búfer, a menos que sepa con certeza que la entrada siempre tendrá un formato específico (y tal vez ni siquiera entonces).
Recuerde que scanf
significa "escaneo formateado" y que hay muy pocos datos menos formateados que los ingresados por el usuario. Es ideal si tiene control total del formato de los datos de entrada, pero generalmente no es adecuado para la entrada del usuario.
Utilice fgets()
(que tiene protección contra desbordamiento del búfer) para obtener su entrada en una cadena y sscanf()
evaluarla. sscanf()
Dado que solo desea lo que el usuario ingresó sin analizar, en este caso realmente no lo necesita :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Maximum name size + 1. */
#define MAX_NAME_SZ 256
int main(int argC, char *argV[]) {
/* Allocate memory and check if okay. */
char *name = malloc(MAX_NAME_SZ);
if (name == NULL) {
printf("No memory\n");
return 1;
}
/* Ask user for name. */
printf("What is your name? ");
/* Get the name, with size limit. */
fgets(name, MAX_NAME_SZ, stdin);
/* Remove trailing newline, if there. */
if ((strlen(name) > 0) && (name[strlen (name) - 1] == '\n'))
name[strlen (name) - 1] = '\0';
/* Say hello. */
printf("Hello %s. Nice to meet you.\n", name);
/* Free memory and exit. */
free (name);
return 0;
}
Intentar
char str[11];
scanf("%10[0-9a-zA-Z ]", str);
Este ejemplo utiliza un scanset invertido, por lo que scanf sigue tomando valores hasta que encuentra una nueva línea '\n', por lo que los espacios también se guardan.
#include <stdio.h>
int main (int argc, char const *argv[])
{
char name[20];
// get up to buffer size - 1 characters (to account for NULL terminator)
scanf("%19[^\n]", name);
printf("%s\n", name);
return 0;
}
Puedes usar esto
char name[20];
scanf("%19[^\n]", name);
O esto
void getText(char *message, char *variable, int size){
printf("\n %s: ", message);
fgets(variable, sizeof(char) * size, stdin);
sscanf(variable, "%[^\n]", variable);
}
char name[20];
getText("Your name", name, 20);
MANIFESTACIÓN