¿Leer una cadena de entrada con carácter de espacio? [duplicar]
Estoy usando Ubuntu y también estoy usando Geany y CodeBlock como mi IDE. Lo que intento hacer es leer una cadena (como "Barack Obama"
) y ponerla en una variable:
#include <stdio.h>
int main(void)
{
char name[100];
printf("Enter your name: ");
scanf("%s", name);
printf("Your Name is: %s", name);
return 0;
}
Producción:
Enter your name: Barack Obama
Your Name is: Barack
¿Cómo puedo hacer que el programa lea el nombre completo?
Usar:
fgets (name, 100, stdin);
100
es la longitud máxima del búfer. Debes ajustarlo según tus necesidades.
Usar:
scanf ("%[^\n]%*c", name);
Es []
el carácter del conjunto de escaneo. [^\n]
dice que mientras la entrada no sea una nueva línea ( '\n'
), tome la entrada. Luego con %*c
lee el carácter de nueva línea del buffer de entrada (que no se lee), y indica *
que esta lectura en la entrada se descarta (supresión de asignación), ya que no la necesita, y esta nueva línea en el buffer no crea cualquier problema para las próximas entradas que pueda tomar.
Lea aquí sobre el scanset y los operadores de supresión de asignaciones .
Tenga en cuenta que también puede utilizar gets
pero...
Nunca usar
gets()
. Debido a que es imposible saber sin conocer los datos de antemano cuántos caracteres leerá get(), y debido a quegets()
continuará almacenando caracteres más allá del final del búfer, su uso es extremadamente peligroso. Se ha utilizado para violar la seguridad informática. Úselofgets()
en su lugar.
Prueba esto:
scanf("%[^\n]s",name);
\n
simplemente establece el delimitador de la cadena escaneada.
La respuesta correcta es esta:
#include <stdio.h>
int main(void)
{
char name[100];
printf("Enter your name: ");
// pay attention to the space in front of the %
//that do all the trick
scanf(" %[^\n]s", name);
printf("Your Name is: %s", name);
return 0;
}
Ese espacio delante de % es muy importante, porque si tienes en tu programa otros cuantos scanf digamos que tienes 1 scanf de valor entero y otro scanf con valor doble... cuando llegues al scanf de tu char (string nombre) ese comando se omitirá y no podrá ingresar un valor para él... pero si coloca ese espacio delante de% todo estará bien y no se omitirá nada.
A continuación se muestra un ejemplo de cómo puede obtener entradas que contengan espacios utilizando la fgets
función.
#include <stdio.h>
int main()
{
char name[100];
printf("Enter your name: ");
fgets(name, 100, stdin);
printf("Your Name is: %s", name);
return 0;
}