Pregunta ¿Lectura de cadena de entrada con carácter de espacio?


Estoy usando Ubuntu y también estoy usando Geany y CodeBlock como mi IDE. Lo que intento hacer es leer una cuerda (como "Barack Obama") y ponerlo 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;
}

Salida:

Enter your name: Barack Obama
Your Name is: Barack

¿Cómo puedo hacer que el programa lea el nombre completo?


75
2018-06-08 16:37


origen


Respuestas:


Utilizar:

fgets (name, 100, stdin);

100 es la longitud máxima del búfer. Debe ajustarlo según su necesidad.

Utilizar:

scanf ("%[^\n]%*c", name);

los [] es el personaje del scanset [^\n] dice que mientras la entrada es no una nueva línea ('\n') tomar entrada. Entonces con el %*c lee el carácter de nueva línea del búfer de entrada (que no se lee) y el * indica que esta entrada de lectura se descarta (supresión de asignación), ya que no la necesita, y esta nueva línea en el búfer no crea ningún problema para las siguientes entradas que pueda tomar.

Lea aquí sobre el scanset y el supresión de asignación operadores.

Tenga en cuenta que también puede usar gets pero ....

Nunca usar gets(). Porque es imposible decir sin conocer los datos de antemano cuántos caracteres obtendrá () leerá, y porque gets() continuará almacenando caracteres más allá del final del búfer, es extremadamente peligroso de usar. Se ha utilizado para romper la seguridad informática. Utilizar fgets() en lugar.


144
2018-06-08 16:40



Prueba esto:

scanf("%[^\n]s",name);

\n simplemente establece el delimitador para la cadena escaneada.


21
2018-06-08 16:54



Aquí hay un ejemplo de cómo puede obtener entradas que contengan espacios usando el 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;
}

5
2017-09-02 00:52



scanf(" %[^\t\n]s",&str);

str es la variable de la que está obteniendo la cadena.


3
2017-11-19 15:39



#include<stdio.h>
int main()
{
   char name[100];
   printf("Enter your name: ");
   scanf("%[^\n]s",name);
   printf("Your Name is: %s",name);
   return 0;
}

2
2018-06-26 06:29



NOTA: Cuando se utiliza fgets (), el último carácter de la matriz será '\ n' cuando use fgets () para entradas pequeñas en CLI (intérprete de línea de comando), al terminar la cadena con 'Enter'. Entonces, cuando imprime la cadena, el compilador siempre irá a la siguiente línea cuando imprima la cadena. Si desea que la cadena de entrada tenga un comportamiento similar a una cadena con terminación nula, use este truco simple.

#include<stdio.h>
int main()
{
 int i,size;
 char a[100];
 fgets(a,100,stdin);;
 size = strlen(a);
 a[size-1]='\0';

return 0;
}

Actualización: actualizada con la ayuda de otros usuarios.


2
2018-01-18 12:02



Usando este código puede tomar entrada hasta presionar enter de su teclado.

char ch[100];
int i;
for (i = 0; ch[i] != '\n'; i++)
{
    scanf("%c ", &ch[i]);
}

1
2017-08-23 11:18